顺时针打印矩阵
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
思路
创建一些实例输入测试,对向右,向下,向左,向上进行标记。
4的方向对应四个不同的对i,j,k以及数组add的处理
在处理过程中,注意这个操作本身是在操作行还是列,也就是变换的是i还是j。除此以外,特别注意for语句的循环退出条件,一定是个动态变化的值,不能写死了(注意观察每一步的变量,定量即可)
代码:
class Solution {
public int[] spiralOrder(int[][] matrix) {
if(matrix.length != 0){
int[] arr = new int[matrix.length*matrix[0].length];
int k = 1;
int s = 0;
int j = 0;
int i = 0;
//1:右 2:下 3:左 4:上
//matrix的列数为matrix[0].length
//matrix的行数为matrix.length
while(s != matrix.length*matrix[0].length){
if(k == 1){
for(;j<matrix[0].length-i;j++){
arr[s] = matrix[i][j];
s++;
}
i++;
k = 2;
}else if(k == 2){
for(; i <matrix.length -(matrix[0].length-j); i++){
arr[s] = matrix[i][j-1];
s++;
}
j--;
k = 3;
}else if(k == 3){
for(j=j-1;j>matrix.length - i;j--){
arr[s] = matrix[i-1][j];
s++;
}
i--;
k = 4;
}else if(k == 4){
for(;i> j;i--){
arr[s] = matrix[i][j];
s++;
}
j++;
i++;
k = 1;
}
}
return arr;
}else{
int[] arr = new int[0];
return arr;
}
}
}