Leetcode54. 螺旋矩阵(简单模拟)
Posted !0 !
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode54. 螺旋矩阵(简单模拟)相关的知识,希望对你有一定的参考价值。
题目链接:https://leetcode-cn.com/problems/spiral-matrix/
解题思路
我们先定义四个边界,l
代表左边界,r
代表右边界,t
代表上边界,d
代表下边界。我们是按顺时针方向走,所以依次遍历边界之间的值,最后添加到ans
集合中。
代码
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> ans = new ArrayList<>();
int l = 0, r = matrix[0].length - 1, t = 0, d = matrix.length - 1; //定义边界
while (true) {
for(int i = l; i <= r; i++) //从左往右走
ans.add(matrix[t][i]);
if(++t > d) break; //上边界+1
for(int i = t; i <= d; i++) //从上往下走
ans.add(matrix[i][r]);
if(l > --r) break; //右边界-1
for(int i = r; i >= l; i--) //从右往左走
ans.add(matrix[d][i]);
if(t > --d) break; //下边界-1
for(int i = d; i >= t; i--) //从下往上走
ans.add(matrix[i][l]);
if(++l > r) break; //上边界+1
}
return ans;
}
}
复杂度分析
- 时间复杂度: O ( m ∗ n ) O(m * n) O(m∗n)
- 空间复杂度: O ( m ∗ n ) O(m * n) O(m∗n)
以上是关于Leetcode54. 螺旋矩阵(简单模拟)的主要内容,如果未能解决你的问题,请参考以下文章