乐趣区

关于java:LeetCode059螺旋矩阵-II

螺旋矩阵 II

题目形容:给你一个正整数 n,生成一个蕴含 1 到

$$
n^{2}
$$

的所有元素,且元素按顺时针程序螺旋排列的 n x n 正方形矩阵 matrix。

示例阐明请见 LeetCode 官网。

起源:力扣(LeetCode)
链接:https://leetcode-cn.com/probl…
著作权归领扣网络所有。商业转载请分割官网受权,非商业转载请注明出处。

解法一:数组遍历

首先,result 为要生成的正方形矩阵即二维数组,对应申明一个同样大小的 flag 二维数组记录相应地位是否曾经走过,count 为已记录的元素数量,i 和 j 记录以后地位的索引地位,i 初始化为 0,j 初始化为 -1,而后依照向右、向下、向左、向右的程序开始解决二维数组:

  • 向右:将 j 往右挪动一位,判断是否没有超过 n 的界线并且挪动后的地位是否没有遍历过并且 count 小于 n *n,如果符合条件,则将 count 加 1 而后填充到以后 (i, j) 地位上,并且将该地位的标记地位为 true,直到往右移不动为止;
  • 向下:将 i 往下挪动一位,判断是否没有超过 n 的界线并且挪动后的地位是否没有遍历过并且 count 小于 n *n,如果符合条件,则将 count 加 1 而后填充到以后 (i, j) 地位上,并且将该地位的标记地位为 true,直到往下移不动为止;
  • 往左:将 j 往左挪动一位,判断是否不小于 0 并且挪动后的地位是否没有遍历过并且 count 小于 n *n,如果符合条件,则将 count 加 1 而后填充到以后 (i, j) 地位上,并且将该地位的标记地位为 true,直到往左移不动为止;
  • 往上:将 i 往上挪动一位,判断是否不小于 0 并且挪动后的地位是否没有遍历过并且 count 小于 n *n,如果符合条件,则将 count 加 1 而后填充到以后 (i, j) 地位上,并且将该地位的标记地位为 true,直到往上移不动为止。

反复下面的过程,晓得 count 等于 n * n 即所有的数字都填充到 result 中,最初返回 result。

阐明:和题目 LeetCode-054- 螺旋矩阵 解法相似。

public class LeetCode_059 {public static int[][] generateMatrix(int n) {int[][] result = new int[n][n];
        boolean[][] flag = new boolean[n][n];
        int i = 0, j = -1, count = 0;
        while (count < n * n) {
            // 向右
            while (j + 1 < n && !flag[i][j + 1] && count < n * n) {
                j = j + 1;
                count++;
                result[i][j] = count;
                flag[i][j] = true;
            }

            // 向下
            while (i + 1 < n && !flag[i + 1][j] && count < n * n) {
                i = i + 1;
                count++;
                result[i][j] = count;
                flag[i][j] = true;
            }

            // 向左
            while (j - 1 >= 0 && !flag[i][j - 1] && count < n * n) {
                j = j - 1;
                count++;
                result[i][j] = count;
                flag[i][j] = true;
            }

            // 向上
            while (i - 1 >= 0 && !flag[i - 1][j] && count < n * n) {
                i = i - 1;
                count++;
                result[i][j] = count;
                flag[i][j] = true;
            }
        }
        return result;
    }

    public static void main(String[] args) {for (int[] ints : generateMatrix(4)) {for (int anInt : ints) {System.out.print(anInt + "\t");
            }
            System.out.println();}
    }
}

【每日寄语】要永远面朝阳光生存,这样的话,那些不好的暗影就会被甩到前面。

退出移动版