蛇形数组就是:
[1, 2, 3]
[8, 9, 4]
[7, 6, 5]
和
[ 1, 2, 3, 4]
[12, 13, 14, 5]
[11, 16, 15, 6]
[10, 9, 8, 7]
这种,数字呈螺旋状向中心递增。
思路很简单,用一个flag判断递增的方向:上
、下
、左
、右
。
import java.util.Arrays;
public class Test {
/**
* 0 上
* 1 下
* 2 左
* 3 右
*/
private static int flag = 3;
public static void main(String[] args) throws Exception {
int N = 4; // 宽度
int n = 1; // 起始值
int i = 0, j = 0; // 坐标
int[][] nums = new int[N][N];
while (n <= N * N) {
nums[i][j] = n++;
switch (flag) {
case 0:
// 因为数组被初始化为0,数字从1开始递增,所以0即为蛇形未经过的坐标值
if (i - 1 >= 0 && nums[i - 1][j] == 0) {
// 当前坐标没有抵达边缘
i--;
break;
}
// 当前坐标抵达边缘
flag = 3;
j++;
break;
case 1:
if (i + 1 < N && nums[i + 1][j] == 0) {
i++;
break;
}
flag = 2;
j--;
break;
case 2:
if (j - 1 >= 0 && nums[i][j - 1] == 0) {
j--;
break;
}
flag = 0;
i--;
break;
case 3:
if (j + 1 < N && nums[i][j + 1] == 0) {
j++;
break;
}
flag = 1;
i++;
break;
}
}
/*
Print
*/
for (int[] num : nums) {
System.out.println(Arrays.toString(num));
}
}
}