螺旋矩阵 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();}
}
}
【每日寄语】要永远面朝阳光生存,这样的话,那些不好的暗影就会被甩到前面。