输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[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 {
// 获取行数array.length;
// 获取列数:array[0].length;
public int[] spiralOrder(int[][] matrix) {
if(matrix.length == 0) return new int[0];
// 左闭右开原则;
int left=0; //左
int right=matrix[0].length-1; //右---列[]
int top=0; //顶
int bottom=matrix.length-1; //底 ----行
int x=0;
int[] res = new int[((right+1)*(bottom+1))];//定义一个数组存储
while (true) {
for (int i =left; i <=right; i++) { //左到右
res[x++]=matrix[top][i];
}
//之后开始上到下,需要先判断;
//更新边界值(top+1), 判断更新后的边界值是否交叉: 等于不算交叉
if(++top>bottom) break; // 上一个 for 左到右遍历后 top就往下移;
for (int i = top; i <= bottom; i++) { //上到下遍历
res[x++]=matrix[i][right];
}
if (left>--right) break; // 列遍历后 right就往左移;
for (int i = right; i>=left ; i--) { //右到左
res[x++]=matrix[bottom][i];
}
if (--bottom<top) break; // 上一个for右到左遍历后 bottom就往上移;
for (int i =bottom; i >=top; i--) { //下到上
res[x++]=matrix[i][left];
}
if (right<++left) break; // 遍历后 left就往右移;
}
return res ;
}
}