题目描述
主要思路
四周边界的选择
打印圈数的确定
判断打印是否完成
代码实现
package cz;
public class prinCloM_0718 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int [][] matrix= {{1,2,3},{4,5,6},{7,8,9}};
int [] res=spiralOrder(matrix);
for(int i=0;i<res.length;i++) {
System.out.print(res[i]);
}
}
public static int[] spiralOrder(int[][] matrix) {
if(matrix.length==0) return new int [0];
int row=matrix.length;
int col=matrix[0].length;
int [] res=new int[row*col];
int r1=0;
int r2=matrix.length-1;
int c1=0;
int c2=matrix[0].length-1;
int times=Math.min(row,col)%2==0?Math.min(row,col)/2:Math.min(row,col)/2+1;
int num=0;
for(int t=0;t<times;t++) {
//开始打印
//从左往右
for(int t1=c1;t1<=c2;t1++) {
res[num]=matrix[r1][t1];num++;
}
//从上往下
for(int t2=r1+1;t2<=r2;t2++) {
res[num]=matrix[t2][c2];num++;
}
//如果不止一行数据
if(c1<c2 && r1<r2) {
//从右往左
for(int t3=c2-1;t3>=c1;t3--) {
res[num]=matrix[r2][t3];num++;
}
//从下往上
for(int t4=r2-1;t4>r1;t4--) {
res[num]=matrix[t4][c1];num++;
}
}
r1++;
r2--;
c1++;
c2--;
}
return res;
}
}