腾讯2016实习生编程题 打印蛇形二维数组
当时腾讯测评笔试的时候没有写出来,今天想想把这玩意给弄出来,想思路包括写程序大概用了20分钟,接着调试程序用了接近30分钟
根据这些情况,恩,给自己打75分。 调试过程中出现的异常主要是数组下标越界 就是循环过程,在边界条件下,中数组下标没有处理好
下面是我的code
package test1; /* * 输入一个整数 输出一个矩阵 * 例子 整数等于3 * 矩阵为 1 2 3 * 8 9 4 * 7 6 5
*输出为 1 2 3 8 9 4 7 6 5 * 思路:首先确定有多少圈 就有多少个循环 * 定义circle 记录圈数 * 定义count记录每次移动的递增数 从1 到N*N * 每个循环中根据arr二维数组的横纵坐标 使得顺时针旋转,每移动一次,count++ */ public class SnakeMatrix { public static void main(String[] args) { SnakeMatrix.matrix(4); } public static void matrix(int num){ if(num<=0) return; int circle = 0; if(num%2==0) circle=num>>1; else circle=(num>>1)+1; int col,row; int arr[][] = new int[num][num]; int count=1; for(int i=0;i<circle;i++){ row=i; col=i; while(col<num-i){ arr[row][col++]=count++; } col--; row++; while(row<num-i){ arr[row++][col]=count++; } row--; col--; while(col>=i){ arr[row][col--]=count++; } col++; row--; while(row>i){ arr[row--][col]=count++; } } for(int i=0;i<num;i++){ for(int j=0;j<num;j++){ System.out.print(arr[i][j]+" "); } } } }
个人感觉代码的亮点有
1 如何实现顺时针循环遍历,到了每个角上如何转变方向
2 转变方向后数组下标的处理