给定一个包含 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]
详细思路可以看我的上一篇博客(两道题其实一样,ArrayList底层也是个数组,都是将数组返回):https://blog.csdn.net/ls_wifi/article/details/108014305
import java.util.*;
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> a = new ArrayList<>();
if(matrix==null || matrix.length==0 || matrix[0].length == 0){
return a;
}
int x=0;
int y=0;
int p=matrix.length;
int q=matrix[0].length;
int sum=p*q;
int k=0;
while(true){
for(int i=0;i<q;i++){
System.out.print(matrix[x][y]+" ");
a.add(matrix[x][y]);
k++;
y++;
if(k==sum) return a;
}
y--;
x++;
for(int i=0;i<p-1;i++){
System.out.print(matrix[x][y]+" ");
a.add(matrix[x][y]);
x++;
k++;
if(k==sum) return a;
}
y--;
x--;
for(int i=0;i<q-1;i++){
System.out.print(matrix[x][y]+" ");
a.add(matrix[x][y]);
y--;
k++;
if(k==sum) return a;
}
x--;
y++;
for(int i=0;i<p-2;i++){
System.out.print(matrix[x][y]+" ");
a.add(matrix[x][y]);
x--;
k++;
if(k==sum) return a;
}
x++;
y++;
p=p-2;
q=q-2;
}
}
}