Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
Example 1:
Input:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
Output: [1,2,3,6,9,8,7,4,5]
Example 2:
Input:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
Output: [1,2,3,4,8,12,11,10,9,5,6,7]
思路
本题在牛客网做过一次,但是再拿到还是模模糊糊,说明掌握还是不充分
先复习下思路
首先创建四个变量 分别代表行列的开始和结束边界值(row表示行,column表示列)
然后再while中依次循环,并把边界值依次++或–
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> res = new ArrayList<>();
if(matrix.length == 0){
return res;
}
int rowBegin =0; //行开始
int rowEnd = matrix.length-1;//行结束
int colBegin = 0;//列列开始
int colEnd = matrix[0].length-1;
while(rowBegin <=rowEnd && colBegin <= colEnd){//当循环没到最后一层
//向右遍历
for(int j = colBegin;j<=colEnd;j++){
res.add(matrix[rowBegin][j]);
}
rowBegin++;
//向下遍历
for(int j = rowBegin;j<=rowEnd;j++){
res.add(matrix[j][colEnd]);
}
colEnd--;
if(rowBegin<=rowEnd){
//向左遍历
for(int j = colEnd;j>=colBegin;j--){
res.add(matrix[rowEnd][j]);
}
}
rowEnd--;
if(colBegin<=colEnd){
//向上遍历
for(int j = rowEnd;j>=rowBegin;j--){
res.add(matrix[j][colBegin]);
}
}
colBegin++;
}
return res;
}
}```