剑指 Offer 29. 顺时针打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
解法:模拟
思路:写出4条边界l、t、r、b,分别代表左上右下四条边界,当输出完从左至右的元素时,应把t向下移一行,用于标记刚才的行已被输出,其他3条边类似,当l>r或者t>b时结束
代码:
class Solution {
public int[] spiralOrder(int[][] matrix) {
if(matrix.length==0){
return new int[0];
}
int l=0,t=0,r=matrix[0].length-1,b=matrix.length-1;
int[] ret = new int[(r+1)*(b+1)];
int i;
int j=0;
while(j<ret.length){
if(l<=r){
for(i=l;i<=r;i++){ //左到右
ret[j++] = matrix[t][i];
}
t++;
} else{
break;
}
if(t<=b){
for(i=t;i<=b;i++){ //上到下
ret[j++] = matrix[i][r];
}
r--;
} else{
break;
}
if(l<=r){
for(i=r;i>=l;i--){ //右到左
ret[j++] = matrix[b][i];
}
b--;
} else{
break;
}
if(t<=b){
for(i=b;i>=t;i--){ //下到上
ret[j++] = matrix[i][l];
}
l++;
} else{
break;
}
}
return ret;
}
}

浙公网安备 33010602011771号