首页 > 其他分享 >力扣-59. 螺旋矩阵 II

力扣-59. 螺旋矩阵 II

时间:2024-04-27 15:02:08浏览次数:28  
标签:II 59 int 矩阵 力扣 rowEnd ans rowBegin colBegin

1.题目

题目地址(59. 螺旋矩阵 II - 力扣(LeetCode))

https://leetcode.cn/problems/spiral-matrix-ii/

题目描述

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix

 

示例 1:

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2:

输入:n = 1
输出:[[1]]

 

提示:

  • 1 <= n <= 20

2.题解

基本上同 54.螺旋矩阵 I , 这里为方便只写一种方法了

2.1 分层模拟

代码

  • 语言支持:C++

C++ Code:


class Solution {
public:
    vector<vector<int>> generateMatrix(int n) {
        vector<vector<int>> ans(n, vector<int>(n));
        int rowBegin = 0, rowEnd = n - 1; // 行
        int colBegin = 0, colEnd = n - 1; // 列
        int cnt = 1;
        while (true) {
            // 从左向右遍历(行)
            for (int i = colBegin; i <= colEnd; i++)
                ans[rowBegin][i] = cnt++; // rowBegin 这行已经遍历过了, 下次不可以再遍历, ++rowBegin
            if (++rowBegin > rowEnd)
                break;

            // 从上向下遍历(列)
            for (int i = rowBegin; i <= rowEnd; i++)
                ans[i][colEnd] = cnt++; // colEnd 这列已经遍历过了, 下次不可以再遍历, --colEnd
            if (--colEnd < colBegin)
                break;

            // 从右向左遍历(行)
            for (int i = colEnd; i >= colBegin; i--)
                ans[rowEnd][i] = cnt++;
            if (--rowEnd < rowBegin)
                break;

            // 从下向上遍历(列)
            for (int i = rowEnd; i >= rowBegin; i--)
                ans[i][colBegin] = cnt++;
            if (++colBegin > colEnd)
                break;
        }
        return ans;
    }
};

复杂度分析

令 n 为数组长度。

  • 时间复杂度:\(O(m * n)\)
  • 空间复杂度:\(O(1)\)

标签:II,59,int,矩阵,力扣,rowEnd,ans,rowBegin,colBegin
From: https://www.cnblogs.com/trmbh12/p/18162062

相关文章

  • 力扣-54. 螺旋矩阵
    1.题目题目地址(54.螺旋矩阵-力扣(LeetCode))https://leetcode.cn/problems/spiral-matrix/题目描述给你一个m行n列的矩阵 matrix,请按照顺时针螺旋顺序,返回矩阵中的所有元素。 示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例2:......
  • 力扣-419. 甲板上的战舰
    1.题目题目地址(419.甲板上的战舰-力扣(LeetCode))https://leetcode.cn/problems/battleships-in-a-board/题目描述给你一个大小为mxn的矩阵board表示甲板,其中,每个单元格可以是一艘战舰'X'或者是一个空位'.',返回在甲板board上放置的战舰的数量。战舰只能水平......
  • 力扣-598. 区间加法 II
    1.题目题目地址(598.区间加法II-力扣(LeetCode))https://leetcode.cn/problems/range-addition-ii/题目描述给你一个mx n的矩阵 M和一个操作数组op。矩阵初始化时所有的单元格都为0。ops[i]=[ai,bi]意味着当所有的0<=x<ai和0<=y<bi时,M[x][y]应......
  • 力扣-LCR 126. 斐波那契数
    1.题目题目地址(LCR126.斐波那契数-力扣(LeetCode))https://leetcode.cn/problems/fei-bo-na-qi-shu-lie-lcof/题目描述斐波那契数(通常用F(n)表示)形成的序列称为斐波那契数列。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(0)=0,F(1)=1F(n......
  • 使用Win-ACME在Windows+iis服务器下配置自动续期SSL证书
    win-acme,github地址:https://github.com/win-acme/win-acme简单介绍一下win-acme这款工具吧,看到名字我们就知道前面加了win就代表是windows服务器版本,这款工具也支持liunx服务器。情况说明我本人是做.NET开发的,由于网站建设和小程序开发等都需要https,但是ssl证书有过期的限制,如果......
  • TODO-力扣-707. 设计链表
    1.题目题目地址(707.设计链表-力扣(LeetCode))https://leetcode.cn/problems/design-linked-list/题目描述你可以选择使用单链表或者双链表,设计并实现自己的链表。单链表中的节点应该具备两个属性:val和next。val是当前节点的值,next是指向下一个节点的指针/引用。如果......
  • CH573 CH582 CH592 仿真功能
    操作步骤:1.通过USB或者UART1开启两线调试接口:2.将USB拔下,LINKE用四根线与板子连接(vccgndswdioswdck),再将LINKE的usb端接电脑,3.打开工程,点击下载:一:二:三:四: ......
  • 为 IIncrementalGenerator 增量 Source Generator 源代码生成项目添加单元测试
    本文属于IIncrementalGenerator增量SourceGenerator源代码生成入门系列博客,本文将和大家介绍如何为源代码生成项目添加单元测试添加单元测试的作用不仅可以用来实现通用的单元测试提高质量的功能,还能用来辅助调试IIncrementalGenerator增量SourceGenerator源代码生成项......
  • 使用 ForAttributeWithMetadataName 提高 IIncrementalGenerator 增量 Source Generat
    本文将告诉大家如何使用ForAttributeWithMetadataName方法用来提高IIncrementalGenerator增量SourceGenerator源代码生成的开发效率以及提高源代码生成器的运行效率这是一个在2022的6月15才合入的新功能。原因是Roslyn团队发现了大量的源代码生成器和分析器项目都......
  • 力扣-118. 杨辉三角
    1.题目介绍题目地址(118.杨辉三角-力扣(LeetCode))https://leetcode.cn/problems/pascals-triangle/题目描述给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例1:输入:numRows=5输出:[[1],......