当输入一个数字N时,构造一个N*N的蛇形矩阵,即矩阵的数字1—N^2从外而内依次顺时针打印
当n=3时矩阵为
1 2 3
8 9 4
7 6 5
当n=5时矩阵为
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
当时候做题的时候想到是顺时针打印法,一直没有做出来,因为自己就是想不出从右到左和左下到左上,发来发现剑指offer有一题类似的http://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking,就参考了一下。
public class test{
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext()){
int x=scanner.nextInt();
if(x>0){
printMatrix(x);
}
}
}
//打印算法
public static int[][] printMatrix(int x) {
int array[][]=new int[x][x];
int n = x,m= x;
int y=1;
int layers = (Math.min(n,m)-1)/2+1;//这个是层数
for(int i=0;i<layers;i++){
for(int k = i;k<m-i;k++) array[i][k]=y++;//左至右
for(int j=i+1;j<n-i;j++) array[j][m-i-1]=y++;//右上至右下
for(int k=m-i-2;(k>=i)&&(n-i-1!=i);k--) array[n-i-1][k]=y++;//右至左
for(int j=n-i-2;(j>i)&&(m-i-1!=i);j--) array[j][i]=y++;//左下至左上
}
for(int i=0;i<x;i++){
for(int j=0;j<x;j++){
System.out.print(array[i][j]+" ");
}
System.out.println();
}
return array;
}
}
运行结果: