原题链接:http://oj.leetcode.com/problems/spiral-matrix/这道题是比较简单的数组操作,按螺旋顺序把数组读取并且放到结果数组中即可。基本思路跟Rotate
Image有点类似,就是一层一层的处理,每一层都是按照右下左上的顺序进行读取就可以。实现中要注意两个细节,一个是因为题目中没有说明矩阵是不是方阵,因此要先判断一下行数和列数来确定螺旋的层数。另一个是因为一层会占用两行两列,如果是单数的,最后要将剩余的走完。所以最后还要做一次判断。因为每个元素访问一次,所以时间复杂度是O(m^n),m,n是分别是矩阵的行数和列数,空间复杂度是O(1)。代码如下:public ArrayList<Integer> spiralOrder(int[][] matrix) {
ArrayList<Integer> res = new ArrayList<Integer>();
if(matrix == null || matrix.length==0 || matrix[0].length==0)
return res;
int min = Math.min(matrix.length, matrix[0].length);
int levelNum = min/2;
for(int level=0;level<levelNum;level++)
{
for(int i=level;i<matrix[0].length-level-1;i++)
{
res.add(matrix[level][i]);
}
for(int i=level;i<matrix.length-level-1;i++)
{
res.add(matrix[i][matrix[0].length-1-level]);
}
for(int i=matrix[0].length-1-level;i>level;i--)
{
res.add(matrix[matrix.length-1-level][i]);
}
for(int i=matrix.length-1-level;i>level;i--)
{
res.add(matrix[i][level]);
}
}
if(min%2==1)
{
if(matrix.length < matrix[0].length)
{
for(int i=levelNum; i<matrix[0].length-levelNum;i++)
{
res.add(matrix[levelNum][i]);
}
}
else
{
for(int i=levelNum; i<matrix.length-levelNum;i++)
{
res.add(matrix[i][levelNum]);
}
}
}
return res;
}
因为这道题是比较简单的题目,所以上面提到的两个细节还是比较重要的,面试中遇到了一定要注意,尽量做到没有bug哈。
分享到:
相关推荐
leetcode LeetCode Solutions 算法 - Algorithms 排序算法:快速排序、归并排序、计数排序 搜索算法:回溯、递归、剪枝技巧 图论:最短路、最小生成树、网络流建模 动态规划:背包问题、最长子序列、计数问题 基础...
答案leetcode-java leetcode.com 的 Java 答案 ================索引================ com.leetcode.array Search a 2D Matrix Spiral Matrix com.leetcode.list Linked List Cycle Linked List Cycle II Remove ...
多线程 leetcode 前言 ...Spiral Matrix Path Sum II Copy List with Random Pointer Building H2O Fizz Buzz Multithreaded hard Merge k Sorted Lists Reverse Nodes in k-Group Trapping Rain Water
leetcode category other hot keywords:Palindrome(mic), Subsequence Array 螺旋矩阵Spiral Matrix 顺时针打印矩阵 Next Permutation Product of Array Except Self 189.rotate-array 283.move-zero Range Sum ...
Spiral Matrix medium O 66 Plus One easy O O 118 Pascal's Triangle easy O O 119 Pascal's Triangle II easy O 要满足只用一个array大小空间O(k) k为input大小来完成,须具备backtracking概念 151 Reverse Words ...
leetcode 答案螺旋矩阵 返回二维数组中整数元素的顺时针螺旋列表 [答案击败 100% Java LeetCode 运行时提交] [答案击败 100% Java LeetCode 内存使用提交] 大(O)= O(N)
# [LeetCode](https://leetcode.com/problemset/algorithms/) ![Language](https://img.shields.io/badge/language-Python%20%2F%20C++%2011-orange.svg) [![License]...
第 338 章leetcode_cpp leetcode 的 C++ 代码 包含的问题 1 两和容易2 加两个数中5 最长回文子串中6 ZigZag 转换介质7 反转整数简单8 ...Spiral Matrix II 培养基61 轮播列表中第62话第63话64 最小路径和中66
leetcode 530 力码 全部的: 易(173/237+x) 中(144/437+x) 硬(4/x) 问题 1.Two Sum(dict) 7.(跳过)(数学) 9.(跳过)(串串技巧) 11.盛水最多的容器 12.(跳过)(问题不好) 13.(跳过)(蛮力) 14.(跳过)...
这是我准备面试时建议的个人问题清单。...https://leetcode.com/problems/spiral-matrix/ https://leetcode.com/problems/search-a-2d-matrix/ https://leetcode.com/problems/set-matrix-zeroes/ 弦乐 ...
java lru leetcode LeetCode 记录数据结构与算法/LeetCode练习过程,将...Spiral Matrix Mergesort [Algorithm Swap](Mergesort/Algorithm swap.md) Numbers Queue Stack Toposort Trie Tree Two Pointers Union Find
对于每一道算法题会总结代码、时间复杂度以及一些好的blog排序(sort)...Spiral Matrix IILeetCode 53 Maximum SubarrayLeetCode 152 Maximum Product SubarrayLintCode 138 Subarray SumLintCode 139 Subarray Sum ...
Spiral Matrix II ZigZag Conversion Divide Two Integers Text Justification Max Points on a Line Community QQ 群: 237669375 Github: https://www.github.com/soulmachine/algorithm-essentials 微博: @...
def spiralOrder(self, matrix: List[List[int]]) -> List[int]: if not matrix:return [] m,n = len(matrix),len(matrix[0]) x = y = di = 0 dx = [0,1,0,-1] dy = [1,0,-1,0] res = [] visite