三角螺旋矩阵
据说是Yahoo的一道题,题目如下:
打印如下矩阵,如果 n=7 则输出:
1 2 18 3 19 17 4 20 27 16 5 21 28 26 15 6 22 23 24 25 14 7 8 9 10 11 12 13
注意观察可知,数字增加的方向及走过的步数是有规律的:
向下 7 步 向右 6 步 斜上 5 步 向下 4 步 向右 3 步 斜上 2 步 向下 1 步
所以可以设定的一个变量 direction 记录方向的变化,循环变化。
同时根据 direction 的不同,来决定每次的递增位置。
代码如下:
package org.leeing.matrix;
public class TriangleMatrix {
public static void main(String[] args) {
triangleMatrix(7);
}
private static void triangleMatrix(int num) {
int matrix[][] = new int[num][num];
int row = 0,column = 0;
int direction = 0; // 方向,取值范围:0,1,2
int digit = 1;
for(int i = num;i>=1;i--){
for(int j = i;j>=1;j--){
if(j==1){ // 到达某个方向的终点,改变方向
direction = (direction+1)%3;
}
switch(direction){
case 0: // 向下
matrix[row++][column] = digit++;
break;
case 1: // 向右
matrix[row][column++]=digit++;
break;
case 2: // 斜向上
matrix[row--][column--] = digit++;
break;
}
}
}
for(int i = 0;i<num;i++){
for(int j = 0;j<=i;j++){
System.out.print(matrix[i][j]+"\t");
}
System.out.println();
}
}
}
Related posts:
评论