准备校招的时候碰到了这道题,
顺时针填充矩阵
题目: 给出一个二维数组,要求按照顺时针将二维数组从1~n^2填充。 例如:5*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]
思路
- 四个方向: 向右,向下,向左,向上.
- 方向变化: 向右转向下,向下转向左,向左转向上,向上转向右,有且仅有这四种方向变化.
- 方向变化的时机: 超当前方向填充下一个数字时,越界或位置已经被填充.
实现
- 初始化二维数组
for (int i = 0; i < 5; i++)
for (int j = 0; j < 5; j++)
a[i][j] = -1;
- 定义一个辅助类做当前位置的指针
class Position {
public int x;
public int y;
@Override
public String toString() {
return "x: " + x + " y: " + y;
}
}
-
定义direction为当前方向
0为向右,
1为向下,
2为向做,
3为向上 -
方向变化控制
s