packagecom.wxdedu.simulation;// 螺旋矩阵 顺时针逆时针交替打印publicclassLeetcode54{publicstaticvoidmain(String[] args){int[][] matrix ={{1,2,3,4},{5,6,7,8},{9,10,11,12}};spiralOrder(matrix);}publicstaticvoidspiralOrder(int[][] matrix){int m = matrix.length, n = matrix[0].length;int startx =0, starty =0;int loop =Math.min(m, n)/2;int mid =Math.min(m, n)/2;int offset =1;int x =0, y =0;boolean flag =true;// true代表顺时针,false代表逆时针while(loop--!=0){
x = startx;
y = starty;if(flag){// 上 右 下 左for(; y < n - offset; y++){System.out.println(matrix[x][y]);}for(; x < m - offset; x++){System.out.println(matrix[x][y]);}for(; y > starty; y--){System.out.println(matrix[x][y]);}for(; x > startx; x--){System.out.println(matrix[x][y]);}}else{// 左 下 右 上for(; x < m - offset; x++){System.out.println(matrix[x][y]);}for(; y < n - offset; y++){System.out.println(matrix[x][y]);}for(; x > startx; x--){System.out.println(matrix[x][y]);}for(; y > starty; y--){System.out.println(matrix[x][y]);}}
startx++;
starty++;
offset++;
flag =!flag;}if(Math.min(m, n)%2==1){if(m < n){// 留下一行if(flag){// 顺时针打印for(y = mid; y < n - offset +1; y++){System.out.println(matrix[mid][y]);}}else{// 逆时针打印for(y = n - offset; y >= mid; y--){System.out.println(matrix[mid][y]);}}}else{// 留下一列if(flag){for(x = mid; x < m - offset +1; x++){System.out.println(matrix[x][mid]);}}else{for(x = m - offset; x >= mid; x--){System.out.println(matrix[x][mid]);}}}}}}