public static int[] spiralOrder(int[][] matrix) {
// 如果二维数组为空 直接返回一个空数组
if(matrix == null || matrix.length == 0 || matrix[0].length == 0) {
return new int[0];
}
// 四边界分别代表左右上下、x一维数组索引
int l = 0, r = matrix[0].length - 1, t = 0, b = matrix.length - 1, x = 0;
int[] res = new int[(r + 1) * (b + 1)];
while(true) {
// 从左到右
for(int i = l; i <= r; i++){
res[x++] = matrix[t][i];
}
// 判断top往下走如果大于bottom了证明matrix已经遍历完了
if(++t > b){
break;
}
// 从上到下
for(int i = t; i <= b; i++) {
res[x++] = matrix[i][r];
}
if(l > --r) {
break;
}
// 从右到左
for(int i = r; i >= l; i--) {
res[x++] = matrix[b][i];
}
if(t > --b) {
break;
}
// 从下到上
for(int i = b; i >= t; i--) {
res[x++] = matrix[i][l];
}
if(++l > r) {
break;
}
}
return res;
}
剑指Offer-27顺时针打印矩阵
猜你喜欢
转载自blog.csdn.net/a792396951/article/details/113780066
今日推荐
周排行