首页 > 其他分享 >0059_Spiral-Matrix-ii【M】

0059_Spiral-Matrix-ii【M】

时间:2024-07-23 13:24:40浏览次数:17  
标签:0059 right bottom top Spiral ii range num left

1、基于 4 个边界指针

class Solution:
    def generateMatrix(self, n: int) -> [[int]]:
        left, right, top, bottom = 0, n-1, 0, n-1
        # jy: 初始化矩阵框架, 初始值均为 0
        matrix = [[0 for _ in range(n)] for _ in range(n)]
        # jy: 计算待填充的数值范围 [num, max_num]
        num, max_num = 1, n * n
        # jy: 数值范围确定, 不会存在边界指针越界问题
        while num <= max_num:
            for i in range(left, right + 1): 
                matrix[top][i] = num
                num += 1
            top += 1

            for i in range(top, bottom + 1): 
                matrix[i][right] = num
                num += 1
            right -= 1

            for i in range(right, left - 1, -1):
                matrix[bottom][i] = num
                num += 1
            bottom -= 1

            for i in range(bottom, top - 1, -1):
                matrix[i][left] = num
                num += 1
            left += 1
        return matrix
        

n = 1
res = Solution().generateMatrix(n)
print(res)
"""
[[1]]
"""

2、改写解法 1

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        left, right, top, bottom = 0, n-1, 0, n-1
        matrix = [[0 for _ in range(n)] for _ in range(n)]
        num = 1
        # jy: 数值范围只确定了初始数值, 结束数值未定, 因此填充时可能存
        #     在边界指针越界问题
        while True:
            for i in range(left, right + 1):
                matrix[top][i] = num
                num += 1
            top += 1
            if top > bottom:
                break

            for i in range(top, bottom + 1):
                matrix[i][right] = num
                num += 1
            right -= 1
            if right < left:
                break

            for i in range(right, left - 1, -1):
                matrix[bottom][i] = num
                num += 1
            bottom -= 1
            if bottom < top:
                break

            for i in range(bottom, top - 1, -1):
                matrix[i][left] = num
                num += 1
            left += 1
            if left > right:
                break
        return matrix


n = 3
res = Solution().generateMatrix(n)
print(res)
"""
[[1, 2, 3],
 [8, 9, 4],
 [7, 6, 5]]
"""

标签:0059,right,bottom,top,Spiral,ii,range,num,left
From: https://blog.csdn.net/m0_66491750/article/details/140633584

相关文章

  • 代码随想录算法训练营第36天 | 动态规划基础2:62.不同路径、63.不同路径 II
    62.不同路径https://leetcode.cn/problems/unique-paths/submissions/548656029/代码随想录https://programmercarl.com/0062.不同路径.html63.不同路径IIhttps://leetcode.cn/problems/unique-paths-ii/description/代码随想录https://programmercarl.com/0063.不同路径......
  • 代码随想录训练营 Day4打卡 链表part02 24. 两两交换链表中的节点 19.删除链表的倒数
    代码随想录训练营Day4打卡链表part02一、力扣24.两两交换链表中的节点给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。示例1:输入:head=[1,2,3,4]输出:[2,1,4,3]算法思路:引入虚......
  • C++面向对象编程的一个核心概念--RAII
    RAII是"ResourceAcquisitionIsInitialization"(资源获取即初始化)的缩写,它是C++编程中的一种编程技术,用于管理资源的生命周期。RAII是C++面向对象编程的一个核心概念,它利用对象的构造函数和析构函数来自动管理资源,如内存、文件句柄、线程、互斥锁等。RAII的主要原则包括:1.*......
  • 【I²C协议】STC89C51单片机IIC通信(代码+原理)
    STC89C51单片机IIC通信什么是I²C协议特点构成通信协议开始信号、结束信号、应答信号数据传输代码示例什么是I²C协议IIC,即I²C,全称Inter-IntegratedCircuit,字面上的意思是集成电路之间,它其实是I²CBus简称,所以中文应该叫集成电路总线,是由PHILIPS公司在80年......
  • P1182 数列分段 Section II
    传送锚点:数列分段SectionII-洛谷题目描述对于给定的一个长度为\(N\)的正整数数列\(A_{1\simN}\),现要将其分成\(M\)(\(M\leqN\))段,并要求每段连续,且每段和的最大值最小。关于最大值最小:例如一数列\(4\2\4\5\1\)要分成\(3\)段。将其如下分段:\([4\2][4\5][1......
  • Leetcode—210. 课程表 II【中等】
    2024每日刷题(145)Leetcode—210.课程表IIdfs实现代码enumclassState{init,visiting,visited};classSolution{public:vector<int>findOrder(intnumCourses,vector<vector<int>>&prerequisites){vector<vector<int&g......
  • msp430f5529lp移植OLED屏幕 iic 4针 ccs
    OLED.C  代码私发,开发环境ccs......
  • ucosiii(1): 时钟节拍函数
    时钟节拍中断调用OSTimeTick()函数voidOSTimeTick(void){if(OSRunning!=OS_STATE_OS_RUNNING){return;}>OSTimeTickHook();/*Calluserdefinablehook*/#if(OS_CF......
  • 代码随想录算法训练营第30天 | 贪心算法 2: 122.买卖股票的最佳时机II、55. 跳跃游戏
    代码随想录算法训练营第30天|贪心算法2:122.买卖股票的最佳时机II、55.跳跃游戏、45.跳跃游戏II、1005.K次取反后最大化的数组和122.买卖股票的最佳时机IIhttps://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/代码随想录https://programmerca......
  • 代码随想录day 29 买卖股票的最佳时机II | 跳跃游戏 | 跳跃游戏II | K次取反后最大化
    买卖股票的最佳时机II买卖股票的最佳时机II解题思路利用贪心算法,只要股票卖了后一天能获利,就买了,所以只要遍历一下整个数组,根据这个算法就能得到最终获利的数目知识点贪心心得歪打正着的一题跳跃游戏跳跃游戏解题思路利用贪心算法,只需要有一次跳转到数组之外说明就能跳......