题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
限制:
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
来源:力扣(LeetCode)
解答
class Solution {
static final int[] direction_x={0,1,0,-1};
static final int[] direction_y={1,0,-1,0};
boolean[][] visit;
int x=0;
int y=0;
int cnt=0;
boolean judge(int [][]matrix){
if(x+direction_x[cnt]>=matrix.length)return true;
if(y+direction_y[cnt]>=matrix[0].length)return true;
if(x+direction_x[cnt]<0)return true;
if(y+direction_y[cnt]<0)return true;
int x1=x+direction_x[cnt];
int y1=y+direction_y[cnt];
if(visit[x1][y1]==true) return true;
return false;
}
public int[] spiralOrder(int[][] matrix) {
if(matrix==null) return null;
if(matrix.length==0||matrix[0].length==0) return new int[0];
x=y=cnt=0;
visit=new boolean[matrix.length][matrix[0].length];
int array[]=new int[matrix.length*matrix[0].length];
for(int i=0;i<array.length;++i){
if (judge(matrix)){
++cnt;
cnt%=4;
}
array[i]=matrix[x][y];
visit[x][y]=true;
x+=direction_x[cnt];
y+=direction_y[cnt];
}
return array;
}
}
测试代码
public class test1 {
public static void main(String[] args) {
int [][]matrix={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int []aaa=new Solution().spiralOrder(matrix);
for (int i:aaa){
System.out.printf(i+" ");
}
}
}