力扣刷題——59.螺旋矩陣II

力扣刷題——59.螺旋矩陣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

標準答案

class Solution:def generateMatrix(self, n: int) -> List[List[int]]:# for _ in range(n)列表推導式,會重復執行前面的[0] * n 一共n次matrix = [[0] * n for _ in range(n)]# 第一維度-行;第二維度-列。left, right, top, bottom = 0, n - 1, 0, n - 1num = 1while left <= right and top <= bottom:# 從左到右for j in range(left, right + 1):matrix[top][j] = numnum += 1# 從上到下for i in range(top + 1, bottom + 1):matrix[i][right] = numnum += 1# 保證至少有兩行兩列時,才執行“右→左”和“下→上”,#否則可能會覆蓋或重復填數if top < bottom and left < right:# 從右到左# 每次循環 j 減 1,表示從右往左走for j in range(right - 1, left, -1):matrix[bottom][j] = numnum += 1# 從下到上for i in range(bottom, top, -1):matrix[i][left] = numnum += 1left += 1right -= 1top += 1bottom -= 1return matrix

思路總結

一共四個方向,逐個方向去走,每個方向都有一個維度是固定的。從外圈向內圈螺旋填數,每走完一圈收縮邊界,直到填滿 n2 個數。

  1. 初始化邊界:
    top = 0, bottom = n-1 (行范圍)
    eft = 0, right = n-1 (列范圍)
    num = 1 (從 1 填到 n2)

  2. 按圈循環填數字(每次四個方向):
    從左到右:固定行 top,列從 left → right
    從上到下:固定列 right,行從 top+1 → bottom
    從右到左:固定行 bottom,列從 right-1 → left+1
    從下到上:固定列 left,行從 bottom → top+1

  3. 收縮邊界:
    top += 1, bottom -= 1, left += 1, right -= 1
    直到所有數字填完

復雜度:
時間 O(n2),空間 O(1)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/96292.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/96292.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/96292.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

win11系統還原點恢復系統

背景 系統換位bug11后&#xff0c;真的是各種以前的操作和設置找不到&#xff0c;太煩了&#xff0c;我是沒想到&#xff0c;連系統恢復還原點都這么難找。然后搜了一圈都是恢復系統之類的&#xff0c;真的崩潰。只好自己記錄了。 ?內容找到設置—>系統–>系統信息系統信…

DHCP 原理與配置(一)

應用場景隨著網絡規模的不斷擴大&#xff0c;網絡復雜度不斷提升&#xff0c;網絡中的終端設備例如主機、手機、 平板等&#xff0c;位置經常變化。終端設備訪問網絡時需要配置IP地址、網關地址、DNS服務器 地址等。采用手工方式為終端配置這些參數非常低效且不夠靈活。 IETF于…

SARibbon的編譯構建及詳細用法

目錄 1.1 源碼構建 1.2 搭建項目 1.3 詳細用法 1.4 不同風格 1.5 完整代碼 引言:SARibbon是一個專門為Qt框架設計的開源Ribbon風格界面控件庫,它模仿了微軟Office和WPS的Ribbon UI風格,適用于需要復雜菜單和工具欄的大型桌面程序。本文從源碼編譯構建到詳細使用,做了一…

CSS【詳解】性能優化

精簡 CSS移除未使用的 CSS&#xff08;“死代碼”&#xff09;&#xff0c;可借助工具如 PurgeCSS、UnCSS 自動檢測并刪除未被頁面使用的樣式。避免重復樣式&#xff0c;通過提取公共樣式&#xff08;如 mixin 或公共類&#xff09;減少代碼冗余。利用預處理器&#xff08;Sass…

Flutter 線程模型詳解:主線程、異步與 Isolate

一、主線程&#xff1a;默認的執行環境 所有代碼默認運行在主線程。下面的例子展示了一個會阻塞主線程的錯誤示范&#xff1a; import package:flutter/material.dart;void main() {runApp(const MyApp()); }class MyApp extends StatelessWidget {const MyApp({super.key});ov…

ChartDB:可視化數據庫設計工具私有化部署

ChartDB:可視化數據庫設計工具私有化部署一、什么是ChartDB ChartDB 是一款基于 Web 的開源數據庫可視化工具&#xff0c;專為簡化數據庫設計與管理流程而開發。以下是其核心特性與功能概述: 1、核心功能 智能查詢可視化?&#xff1a;通過單條 SQL 查詢即可生成數據庫架構圖&a…

單片機-FreeRTOS(ing)

目錄 一、基礎介紹 1.1 調度策略 1.1.1 調度方式 1.1.2 調度器 1.2 任務以及優先級 1.2.1 任務與協程 1.2.2 任務狀態 1.2.3 任務優先級 1.2.4 任務優先級分配方案 1.3 任務間通信 - 信號量 1.3.1 信號量 1.3.2 任務間計數信號量的實現 1.3.3 中斷方式計數信號量的…

為什么調用API總返回404,該如何調試

當調用一個應用程序接口&#xff08;API&#xff09;時&#xff0c;持續地收到“404 未找到”的錯誤&#xff0c;其核心原因在于客戶端發起的“請求”&#xff0c;未能成功地&#xff0c;匹配到服務器上任何一個“真實存在”的、可供訪問的“資源路徑”。這本質上&#xff0c;是…

醫療信息化自主可控轉型的實踐探索 —— 以常德二院為例

目錄 頭雁領航 - 激發醫療新質生產力 核心支撐 - 電科金倉奠定數據底座 生態共建 - 攜手護航醫療信創發展 信創產業發展是國家經濟數字化轉型、提升產業鏈發展的關鍵&#xff0c;是科技自立自強的核心基座&#xff0c;其本質是實現中國信息化產業的自主可控。醫療信創作為關…

Gin傳參和接收參數的方式

Gin查詢參數和接收參數的方式 常用 Gin 綁定方法對比方法用途特點c.Bind()自動識別 Content-Type最通用&#xff0c;根據請求頭自動選擇綁定方式c.ShouldBindJSON()只綁定 JSON強制使用 JSON 格式&#xff0c;類型明確c.ShouldBindXML()只綁定 XML強制使用 XML 格式c.ShouldBin…

MariaDB/MySQL 客戶端工具與服務端配置精要指南

文章目錄一、客戶端與服務端程序二、用戶賬號管理三、MySQL 客戶端命令3.1 命令類型?3.2 使用模式?3.3 常用選項?3.4 提示符定制?四、mysqladmin管理命令??五、服務端配置?5.1 配置文件???5.2 Socket 通信配置??六、最佳實踐總結免費個人運維知識庫&#xff0c;歡迎…

自動化項目日報生成工具測評與選型:如何匹配團隊日報管理需求

引言在項目管理場景中&#xff0c;手動撰寫日報常面臨多重效率瓶頸&#xff1a;任務數據分散在協作群、Excel 表格、項目看板等多個平臺&#xff0c;匯總時需反復核對&#xff1b;不同成員日報格式不統一&#xff0c;管理層整合分析耗時&#xff1b;任務進度與日報信息不同步&a…

基于SpringBoot+Vue的吳韻蘇香文旅小程序(協同過濾算法、Echarts圖形化分析、騰訊地圖API、二維碼識別)

&#x1f388;系統亮點&#xff1a;協同過濾算法、Echarts圖形化分析、騰訊地圖API、二維碼識別&#xff1b;一.系統開發工具與環境搭建1.系統設計開發工具后端使用Java編程語言的Spring boot框架 項目架構&#xff1a;B/S架構 運行環境&#xff1a;win10/win11、jdk17小程序&a…

python numpy.random的基礎教程(附opencv 圖片轉數組、數組轉圖片)

目錄 1.在區間[a,b)隨機生成n個整數。 2.在區間[a,b)隨機生成n個數。 3.在區間[0,1)生成隨機數 4.打亂順序 5.從指定的列表中選擇 NumPy&#xff08;Numerical Python&#xff09;是一個開源的科學計算庫&#xff0c;專門用于高效處理多維數組&#xff08;ndarray&#xf…

Vue2.x核心技術與實戰(二)

目錄 三、Vue2.x:生命周期+工程化開發(組件入門) 3.1 生命周期 3.1.1 生命周期 & 生命周期四個階段 3.1.2 生命周期鉤子 Vue生命周期鉤子案例 - 新聞列表 & 輸入框自動聚焦 3.2 綜合案例:小黑記賬清單 3.3 工程化開發入門 3.3.1 工程化開發 & 腳手架Vue …

【鴻蒙心跡】7×24小時極限求生:當Origin_null遇上鴻蒙,我如何用100杯咖啡換一條跨域活路?

文章概要 大家好&#xff0c;我是那個把黑眼圈熬成華為工牌掛繩的倒霉蛋。過去100個夜晚&#xff0c;我在HarmonyOS NEXT的ArkWeb里被Origin:null反復按在地上摩擦——小程序白屏、OPTIONS 400、官方文檔沉默三連擊。最終&#xff0c;我用C、libcurl、OpenSSL和一堆速溶咖啡&am…

【git】刪除一條本地提交的歷史commit

在工程中&#xff0c;如果想要刪除一條本地提交的歷史commit&#xff0c;可以通過droprebase -i HEAD^n的方式。1.情景提交了三條commit&#xff0c;想刪掉第二條commit。git logcommit_id_*******1 commit_id_*******2 commit_id_*******32.解決git rebase -i HEAD~2輸出&…

軟件測試中,JMeter 的作用以及優缺點是什么?

回答重點JMeter 是一款開源的軟件測試工具&#xff0c;主要用來對各種軟件或服務進行性能測試和負載測試。它可以模擬大量用戶同時對服務器、網絡或其他資源發起請求&#xff0c;從而測試它們的響應時間、吞吐量等性能指標。優點&#xff1a;1&#xff09; 開源且免費 &#xf…

STM32存儲結構

我們在使用Keil編譯程序成功后會,有一行各部分占用內存的提示信息,如下Program Size:Code7492 RO-data556 Rw-data72 ZI-data11688,這是stm32代碼編譯后的提示我們分析一下這個編譯輸出&#xff1a;- Code: 7492字節 -> 代碼部分&#xff08;存放在Flash&#xff09;- RO-da…

手機 瀏覽器調用攝像頭掃描二維碼Quagga

注&#xff1a;需用谷歌瀏覽器才能調用權限1. 引入依賴&#xff1a;npm install ericblade/quagga2<template><el-button color"#188ae2" click"handleScan" class"scan-btn" :disabled"isInitializing || isScanning">{{…