蛇形数组

来源:互联网 发布:妈妈讲故事软件下载 编辑:程序博客网 时间:2024/05/16 05:54

蛇形数组就是:

[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));        }    }}
0 0
原创粉丝点击