内螺旋矩阵
暂且就叫内螺旋矩阵吧。
int i=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 int i=6 1 2 3 4 5 6 20 21 22 23 24 7 19 32 33 34 25 8 18 31 36 35 26 9 17 30 29 28 27 10 16 15 14 13 12 11
最近常在网上看到一些打印矩阵的题,后来发现其实都是有相同的规律可循的:
1. 将问题转化为初始化矩阵的问题,然后模拟行走的方向,一般来说,方向都是循环的,而每次行走的步数也是按一定的规律递减,比如当i = 5 时:
向右 5 步 向下 4 步 向左 4 步 向上 3 步 向右 3 步 向下 2 步 向左 2 步 向上 1 步 向右 1 步
很明显吧?544332211,右下左上,右下左上…
2. 在编程时,我们可以用一个整数 direction 来记录方向,每到当前方向的最后一步,就转变方向。由于方向都是按一定的次序循环的,所以,在转换方向时,可以用:
direction = (direction+1)%4。
代码如下:
package org.leeing.matrix;
public class InnerCircle {
public static void main(String[] args) {
circle(5);
}
private static void circle(int num) {
int matrix[][] = new int[num][num];
int row = 0, column = 0;
int direction = 1;
int digit = 1;
int round = 2 * num;
for (int i = round; i >= 2; i--) {
for (int j = i / 2; j >= 1; j--) {
if(j==1){
direction = (direction + 1) % 4;
}
switch (direction) {
case 0:
matrix[row--][column] = digit++;
break;
case 1:
matrix[row][column++] = digit++;
break;
case 2:
matrix[row++][column] = digit++;
break;
case 3:
matrix[row][column--] = digit++;
break;
}
}
}
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
System.out.print(matrix[i][j] + "\t");
}
System.out.println();
}
}
}
是不是和之前的《三角螺旋矩阵》代码很相似呢?:)
Related posts:
评论