美文网首页
59.螺旋矩阵II

59.螺旋矩阵II

作者: 胖胖的熊管家 | 来源:发表于2023-07-02 21:35 被阅读0次

59.螺旋矩阵 II

解题思路

初看,毫无头绪。
打开官方答案领会一下。

整体采用构建矩阵,填充矩阵的思路,填充过程分为四种情况:

  1. 从左到右填充一行
  2. 从上到下填充一列
  3. 从右到左填充一行,注意只有一行的情况
  4. 从下到上填充一列,注意只有一列的情况

出现的问题

JavaScript解法代码

var generateMatrix = function(n) {
    let num = 1;
    const matrix = new Array(n).fill(0).map(() => new Array(n).fill(0));
    let left = 0, right = n - 1, top = 0, bottom = n - 1;
   while (left <= right && top <= bottom) {
        // 从左上至右上
        for (let column = left; column <= right; column++) {
            matrix[top][column] = num;
            num++;
        }
        // 从右上至右下
        for (let row = top + 1; row <= bottom; row++) {
            matrix[row][right] = num;
            num++;
        }
        // 还没到最后一圈
        if (left < right && top < bottom) {
            // 从右下至左下
            for (let column = right - 1; column > left; column--) {
                matrix[bottom][column] = num;
                num++;
            }
            // 从左下至左上
            for (let row = bottom; row > top; row--) {
                matrix[row][left] = num;
                num++;
            }
        }
        left++;
        right--;
        top++;
        bottom--;
    }
    return matrix;
};

Python解法代码

import numpy as np
class Solution(object):
    def generateMatrix(self, n):
        """
        :type n: int
        :rtype: List[List[int]]
        """
        matrix = np.zeros((n, n))
        num = 1
        left=0
        right=n-1
        top=0
        bottom=n-1
        while(left <= right and top <= bottom):
            for i in range(left,right+1):
                matrix[top][i] = num
                num += 1
            for j in range(top+1,bottom+1):
                matrix[j][right] = num
                num += 1
            if(left < right and top < bottom):
                for i in range(right-1,left,-1):
                    matrix[bottom][i] = num
                    num += 1
                for j in range(bottom,top,-1):
                    matrix[j][left] = num
                    num += 1
            left += 1
            right -= 1
            top += 1
            bottom -= 1

        # convert the matrix to integer type and then to a list
        matrix = matrix.astype(int).tolist()
        return matrix
        

总结:

  1. 注意数组的初始化:
    nums = [[0] * n for _ in range(n)] # 创建一个大小为n的二维数组,初始值都为0
    const matrix = new Array(n).fill(0).map(() => new Array(n).fill(0));
    matrix = np.zeros((n, n))

相关文章

  • 59. 螺旋矩阵 II

    59. 螺旋矩阵 II 注意当n为奇数的时候,最中心的点走不到,要单独赋值一下

  • 59.螺旋矩阵II

  • 59. 螺旋矩阵 II

    给定一个正整数n,生成一个包含 1 到n2所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入:3输出:[...

  • 59. 螺旋矩阵 II

    解法

  • 59. 螺旋矩阵 II

    给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。 示例: 输入:...

  • 【Leetcode】59. 螺旋矩阵 II

    题目 给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。 题解 ...

  • 59. 螺旋矩阵 II(medium)

    给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。示例:输入: 3...

  • leetcode 59. 螺旋矩阵 II

    题目描述 给定一个正整数,生成一个包含到所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。相关话题: 数组    ...

  • 59. Spiral Matrix II/螺旋矩阵 II

    Given a positive integer n, generate a square matrix fill...

  • leetcode题目59. 螺旋矩阵 II

    题目描述 链接:https://leetcode-cn.com/problems/spiral-matrix-ii...

网友评论

      本文标题:59.螺旋矩阵II

      本文链接:https://www.haomeiwen.com/subject/imbnydtx.html