Archive

Archive for October 31st, 2011

内螺旋矩阵

October 31st, 2011 leeing No comments

暂且就叫内螺旋矩阵吧。

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。

代码如下:

Read more…

Categories: 面试 Tags: