0
点赞
收藏
分享

微信扫一扫

Java描述 LeetCode,59. Spiral Matrix II 螺旋矩阵II

灯火南山 2022-01-09 阅读 29

1-1:题目描述

Given a positive integer n, generate an n x n matrix filled with elements from 1 to n2 in spiral order.

Example 1:
在这里插入图片描述

Input: n = 3
Output: [[1,2,3],[8,9,4],[7,6,5]]

Example 2:

Input: n = 1
Output: [[1]]

Constraints:

1 <= n <= 20

题目理解:
比较好理解哈,按这个顺序去填写一个正方形数组。

1-2:解法

不涉及什么算法,单纯的用代码去模拟填充数组的这样一个思路。根据正常的逻辑,应该是按四条边,从外向里,从左到右,从上到下。如图:每次我们都提前算好一轮每条边上要遍历的值的数目。startX,startY分别是每一轮开始的坐标,比如第一轮startX=startY=0,第二轮startX=startY=1。这样我们就可以控制每一回的起点,方向,每天边遍历的数目啦!代码如下:

public int[][] generateMatrix(int n) {
    int[][] result = new int[n][n];
    int startX = 0; // 每次开始的x的坐标
    int startY = 0; // 每次开始的y的坐标
    int count = 1; // 从1~n^2
    int number = n - 1; // 每一行的个数
    while (count < n * n) {
        int i = startX;
        int j = startY;

        for (; j < startY + number; j++) {
            result[startX][j] = count++;
        }
        for (; i < startX + number; i++) {
            result[i][j] = count++;
        }
        for (; j > startX; j--) {
            result[i][j] = count++;
        }
        for (; i > startY; i--) {
            result[i][j] = count++;
        }

        startX++;
        startY++;
        number -= 2;
    }
    if (n % 2 == 1) {
        result[n / 2][n / 2] = n * n;
    }
    return result;
}

需要注意的是

  • 下和左,这两条边的边界控制,用startX和startY控制好。
  • 这里的这种边的处理方法,中心位置得最后处理。

在这里插入图片描述

举报

相关推荐

0 条评论