一、问题描述
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
示例 2:
输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]
二、解题思路
这道题目和我做的前一道顺时针输出数组题目基本一模一样,可以参考上一道题目的做法,代码也几乎一摸一样
三、代码
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
if(matrix.length==0)return new ArrayList();
List<Integer> res=new ArrayList();
int m=matrix.length;
int n=matrix[0].length;
int s=m*n;
int l=0;int r=n-1;int u=0;int d=m-1;//窗口边界
int index=0;
while(r>=l&&d>=u){
//向右
for(int i=l;i<=r&&index<s;i++){
res.add(matrix[u][i]);
index++;
}
u++;
//向下
for(int i=u;i<=d&&index<s;i++){
res.add(matrix[i][r]);
index++;
}
r--;
//向左
for(int i=r;i>=l&&index<s;i--){
res.add(matrix[d][i]);
index++;
}
d--;
//向上
for(int i=d;i>=u&&index<s;i--){
res.add(matrix[i][l]);
index++;
}
l++;
}
return res;
}
}
四、结果
执行时间 | 0ms | 100% |
---|---|---|
消耗内存 | 37.8M | 5.72% |
五、总结
刚好看到上一道面试题链接到这个题目,柿子要挑软的捏,当然要先从这道题目开刀了,这个滑动窗口的思想还是挺有用的,避免了许多不必要的判断过程。