输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
剑指 Offer 29. 顺时针打印矩阵 - 力扣(LeetCode) (leetcode-cn.com)
//每遍历完一行或一列,边界都会变化
class Solution {
public int[] spiralOrder(int[][] matrix) {
if(matrix.length == 0){
return new int[0];
}
int m = matrix.length;
int n = matrix[0].length;
int num = m * n;
int[] res = new int[num];
int index = 0;
int i = 0;
int j = 0;
int p = -1; //列下标的下界
int q = 0; //行下标的下界
while(index < num){
while(index < num && j < n){
res[index++] = matrix[i][j];
j++;
}
n--;
j--;
i++;
while(index < num && i < m){
res[index++] = matrix[i][j];
i++;
}
m--;
i--;
j--;
while(index < num && j > p){
res[index++] = matrix[i][j];
j--;
}
p++;
i--;
j++;
while(index < num && i > q){
res[index++] = matrix[i][j];
i--;
}
q++;
i++;
j++;
}
return res;
}
}