题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字
示例:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
思路: 把所有旋转内容拆分成四步 根据圈数和步数计算每次循环的大小内容
更像是个体力活
时间击败了97% 内存击败了100%
代码:
public int[] spiralOrder(int[][] matrix) {
int shu = matrix.length;
if(shu ==0){
return new int[0];
}
int heng = matrix[0].length;
int[] result = new int[heng*shu];
int pace = 0;
int index = 0;
while(true){
if(index > matrix.length*matrix[0].length-1){
break;
}
int yu = pace%4;
if(yu == 0){
index = a(pace,index,result,matrix);
}else if(yu ==1){
index = b(pace,index,result,matrix);
}else if(yu ==2){
index = c(pace,index,result,matrix);
}else{
index = d(pace,index,result,matrix);
}
pace++;
}
return result;
}
public int a(int pace,int index,int[] result ,int[][]matrix){
int start = pace/4;
//从左到右
for(int i=start;i<matrix[0].length-start;i++){
result[index] = matrix[start][i];
index++;
}
return index;
}
public int c(int pace,int index,int[] result ,int[][]matrix){
int quan = pace/4;
int heng = matrix[0].length;
int start = heng-2-quan;
int shu = matrix.length;
//从右到左
for(int i=start;i>=quan;i--){
result[index] = matrix[shu-1-quan][i];
index++;
}
return index;
}
public int b(int pace,int index,int[] result ,int[][]matrix){
int quan = pace/4;
int shu = matrix.length;
int heng = matrix[0].length;
int start = quan+1;
//从上到下
for(int i=start;i<=shu-1-quan;i++){
result[index] = matrix[i][heng-1-quan];
index++;
}
return index;
}
public int d(int pace,int index,int[] result ,int[][]matrix){
int quan = pace/4;
int shu = matrix.length;
int start = shu-1-1-quan;
int end = quan+1;
//从下到上
for(int i=start;i>=end;i--){
result[index] = matrix[i][quan];
index++;
}
return index;
}