Home > Java, 面试 > 三角螺旋矩阵

三角螺旋矩阵

据说是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:

  1. 内螺旋矩阵
  2. 对称矩阵
  3. 蛇形矩阵
  4. Java 的引用传递
  5. Java 的构造方法
Categories: Java, 面试 Tags: ,