常见题面试题:回形打印

给一个数,输出回形数组。
例如:
输入 2 ,打印
1 2
4 3,

输入3 ,打印
1 2 3
8 9 4
7 6 5

每个人的思路不一样。这里仅供参考分享。
首先是找规律,循环执行的话要看执行了多少次,发现执行次数是 2*n-1 次。
在输入数字 大于3 的情况下 会在 四个方向执行,那么就记录 需要执行 坐标就好了。
很久不做题了,稍微花了点时间。

 static public void printMatrix(int size) {
        int[][] nums = new int[size][size];
            //需要循环 的次数 2*num -1
            //四个方向 这里假设 n>3
            //  1 2 3
            //  8 9 4
            //  7 6 5
            //  首先是一共循环 5 次
            //  向右 ->  第 1 ,5 次,向下  第2次,向左 第3次  向上 第4次
            //  再次循环时  次数相当于已经执行了 4次之后的
            //  所以进行取余操作 。1 向右 2向下 3向左 4向下
            int sum = 1;
            int forNum = 2 * size - 1;
            int nextX = 0;  //下次循环的 X 位置
            int nextY = 0;  //下次循环的 Y 位置
            int way = 1;    //当前执行循环数
            while (way <= forNum) {
                int pes = way / 4;
                if (way % 4 == 1) {
                    //向右
                    int i = 0;
                    for (i = nextY; i < size - pes; i++) {
                        System.out.println("nums[" + nextX + "]" + "[" + i + "]" + "=" + sum);
                        nums[nextX][i] = sum++;
                    }
                    nextY = i - 1;
                    nextX = pes + 1;
                } else if (way % 4 == 2) {
                    //向下
                    int i = 0;
                    for (i = nextX; i < size - pes; i++) {
                        System.out.println("nums[" + i + "]" + "[" + nextY + "]" + "=" + sum);
                        nums[i][nextY] = sum++;
                    }
                    nextX = i - 1;
                    nextY = nextY - 1;
                } else if (way % 4 == 3) {
                    //向左
                    int i = 0;
                    for (i = nextY; i >= pes; i--) {
                        System.out.println("nums[" + nextX + "]" + "[" + i + "]" + "=" + sum);
                        nums[nextX][i] = sum++;
                    }
                    nextX = nextX - 1;
                    nextY = i + 1;
                } else if (way % 4 == 0) {
                    //向上
                    int i = 0;
                    for (i = nextX; i >= pes; i--) {
                        System.out.println("nums[" + i + "]" + "[" + nextY + "]" + "=" + sum);
                        nums[i][nextY] = sum++;
                    }
                    nextX = i + 1;
                    nextY = nextY + 1;
                }
                way++;
            }

        System.out.println("-------------------");
        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size; j++) {
                System.out.print(nums[i][j] + " ");
            }
            System.out.println();
        }
    }

你可能感兴趣的:(搜索)