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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/spiral-matrix-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

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

1-2:解法

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

class Solution {
    public int[][] generateMatrix(int n) {
        int[][] nums = new int[n][n];
        int count = 1;
        int number = n - 1;
        int startX = 0, startY = 0;
        while (number > 0) {         // 最好用number去控制,和螺旋矩阵I解法,保持一致。
            int i = startX;
            int j = startY;
            while (j < startY + number) {
                nums[i][j++] = count++;
            }
//            while (j < j+ number) {
//                nums[i][j++] = count++;
//            } 很容易写成这样!注意j也是跟着变的
            while (i < startX + number) {
                nums[i++][j] = count++;
            }
            while (j > startY) {
                nums[i][j--] = count++;
            }
            while (i > startX) {
                nums[i--][j] = count++;
            }
            startX++;                // 坐标要跟着变,容易写着写着忘记了
            startY++;
            number -= 2;
        }
        if (n % 2 == 1) {            // 如果是单数矩阵,中心位置要考虑到。
            nums[n / 2][n / 2] = n * n;
        }
        return nums;
    }
}

需要注意的是

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河海哥yyds

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值