59.螺旋矩陣II

59.螺旋矩陣II?

螺旋矩陣沒有什么算法,就是一道單純模擬轉圈的一道題目,因為轉圈的過程需要處理的邊界條件很多,所以有難度

那只能從第二個節點開始處理;從第二個節點開始處理,把最后一個節點也處理了(第二條邊的處理不包含第一個節點)………………如果處理每條邊的時候節點規則都不一樣,要考慮的邊界條件太多,而且極其容易把自己繞進去……

正確思路:

之前在講二分法的時候就講到了循環不變量,那我們在做螺旋矩陣的時候同樣要遵循循環不變量的原則。

循環是一圈一圈的循環,不變量則是我們對每條邊的處理原則,要堅持一個規則來處理每一條邊。

此處按照左閉右開的規則來遍歷這一圈

在處理邊的時候,只處理第一個節點,最后一個節點不處理;遍歷下一條邊時,也只處理一個節點,最后一個節點不處理;最后一個節點要留給下一條邊來處理;下一條邊也是處理第一個節點,往后一直遍歷,遍歷到倒數第二個節點,這就是左閉右開。

把最后一個節點留給下一條邊,作為下一條邊的起始位置,大家會發現我轉一圈,其實是堅持一個原則,這都是左閉右開,這樣我四條邊的遍歷規則就統一了,把規則統一之后,代碼就很好寫了。

思路:

#這個循環應該轉幾圈,應該轉n/2這么多圈
#如果n是奇數,例如:3/2=1,也就是轉了一圈,還剩下中間的位置如何處理? 只需要最后判斷一下
#如果這個n是奇數計算(n%2)==1,如果是奇數,我們對所填充的數組進行單獨賦值,將最后一個數字填進去#進入循環后,每一圈的起始位置不可能是一個固定的數,可以定義一個 start x=0,再定義一個start y=0   
#這樣我們就定義了一個起起始位置是每一圈都要變的每一圈都要變的,所以我們定義了一個變量,專門來放起始位置。
#起始位置的定義[start x][ start y] =[i][j]offset = 1
count =  1
while(n/2)for (j= starty ;j<n-offset;j++){nums[startx][j] = count++;}#j小于終止位置,終止位置不包含最后一個元素。終止位置也是隨著我們而改變的。所以還需要一個變量來定義它的終止位置。這樣我們就遍歷了第一行。然后對其他元素進行填充。Count是用來計數的,初始值也為一;循環完畢之后j已經等于n減offset。此時j。已經指向第一行的最后一個元素,此時j的值是固定的。到這里第一條橫向邊遍歷完畢,開始遍歷第二條(豎)邊。這豎向條邊的下標為j坐標是(i,j)這么定義的。for (i= startx ;i<n-offset;i++){nums[i][j] = count++;}然后遍歷下方一條橫向邊。我們修改的又是j的值;這里j等于n減offset。此時j這個值不需要初始化,因為我們所遍歷的這個坐標已經走到這個節點了。i和j都是矩陣中的最大值。此時需要知道j的終點在哪里?J>starty,因為我們不處理他的終點位置,堅持左閉右開的原則。for (;j>starty;j--){nums[i][j] = count++;}最后這條邊遍歷的時候,i已經是最大值。i向上遍歷應該大于Startx;這里的每一條邊所堅持的原則都是只處理第一個節點,不處理最后一個節點。for (;i>starty;i--){nums[i][j] = count++;}那么我們每轉一圈,這個start x和starty,都應該加一;此時結束位置由n-1變為n-2。offset由1變為2。                                    startx++starty++offset++
if ((n%2)==1){nums[i][j] = count
}
python代碼

代碼隨想錄 (programmercarl.com)

class Solution:def generateMatrix(self, n: int) -> List[List[int]]:startx,starty = 0,0mid = n//2count = 1matrix = [[0]*n for _ in range(n)]for offset in range(1,mid+1) :for j in range(starty,n-offset):matrix[startx][j] = countcount += 1for i in range(startx,n-offset):matrix[i][n-offset] = countcount += 1for j in range(n-offset,starty,-1):matrix[n-offset][j] = countcount += 1for i in range(n-offset,startx,-1):matrix[i][starty] = countcount += 1starty += 1startx += 1if n%2 != 0:matrix[mid][mid] = countreturn matrix
python如何進行模計算?

在Python中,模計算(也稱為取模運算或求余運算)是通過 % 操作符實現的。模計算通常用于求出一個數除以另一個數的余數。這里有一個基本的例子來展示如何在Python中進行模計算:

# 示例:計算10除以3的余數
result = 10 % 3print(result) ?# 輸出: 1


模計算經常用于判斷一個數是否可以被另一個數整除(如果余數為0,則可以整除),以及循環索引的計算(如循環遍歷數組時,將索引保持在數組長度內的操作)。
注意事項
當使用負數進行模計算時,Python的結果可能與其他編程語言不同。在Python中,結果的符號與被除數(左邊的操作數)相同。
# 負數模計算的例子

print(-10 % 3) ?# 輸出: -1,因為余數的符號與被除數相同
print(10 % -3) ?# 輸出: 1,因為余數的符號與被除數相同


當你嘗試用0作為除數進行模計算時,Python會拋出一個ZeroDivisionError。

nums = [[0] * n for _ in range(n)]

Python中的一個列表推導式(list comprehension),用于創建一個二維列表(或稱為矩陣),其大小為n×n,并且初始時所有元素都被初始化為0。這里的n是一個已經定義好的整數,表示矩陣的行數和列數

for _ in range(n): 這是一個循環,循環n次。這里的_是一個常用的占位符,表示我們不關心循環的當前迭代值(索引)。range(n)生成一個從0到n-1的序列,但由于我們不需要這個序列的具體值,所以使用_來忽略它

  • [0] * n: 這部分創建了一個長度為n的列表,其中包含n個0。這個列表是二維列表中的一行。

  • [[0] * n for _ in range(n)]: 將上述兩部分結合起來,對于每一次外層循環(循環n次),都創建一個長度為n、所有元素為0的列表。這些列表(即矩陣的行)被收集到一個更大的列表中,形成了n×n的二維列表(矩陣)

  • 簡單來說,這行代碼就是創建了一個n行n列的二維列表,其中每個元素都被初始化為0。這種結構在編程中非常常見,特別是在需要處理二維空間數據(如圖像、網格等)時。

列表生成式

列表生成式(List Comprehension)是Python中一種簡潔高效創建列表的方式。它允許你通過一個表達式來生成列表,這個表達式可以是任何有效的Python表達式,并且可以包含循環、條件語句等。列表生成式的基本語法如下:

[expression for item in iterable if condition]
  • expression:這是一個關于當前元素的表達式,用于生成列表中的新元素。
  • for item in iterable:這是一個for循環,遍歷可迭代對象(如列表、元組、字符串、集合、字典等)中的每個元素。
  • if condition(可選):這是一個條件表達式,用于過濾掉那些不滿足條件的元素。只有當條件為真時,當前元素才會被包含在結果列表中。
  • squares = [x**2 for x in range(10)]  
    print(squares)  # 輸出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]even_squares = [x**2 for x in range(10) if x % 2 == 0]  
    print(even_squares)  # 輸出: [0, 4, 16, 36, 64]keys = ['a', 'b', 'c']  
    values = [1, 2, 3]  
    dict_comprehension = {k: v for k, v in zip(keys, values)}  
    print(dict_comprehension)  # 輸出: {'a': 1, 'b': 2, 'c': 3}matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]  
    flattened = [num for row in matrix for num in row]  
    print(flattened)  # 輸出: [1, 2, 3, 4, 5, 6, 7, 8, 9]

?//運算符:

在Python中,//?運算符被稱為整數除法(也稱為地板除)運算符。它執行除法運算,但結果總是向下取整到最接近的整數,即使結果是一個負數。這與傳統的除法(使用?/?運算符)不同,后者在Python 3中對于整數和浮點數都會返回一個浮點數結果。

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

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

相關文章

MS SQL(Microsoft SQL Server)面試常考的知識點

MS SQL是Microsoft SQL Server的簡稱&#xff0c;是由微軟公司開發的一款關系型數據庫管理系統&#xff08;RDBMS,Relational DataBase Management System&#xff09;。它支持在Windows和Linux上運行&#xff0c;廣泛應用于企業級數據庫市場&#xff0c;適用于大型企業網站和應…

百勝軟件獲邀出席第七屆中國智慧零售大會,智能中臺助力品牌零售數智變革

8月28日&#xff0c;由深圳市智慧零售協會主辦的第七屆中國智慧零售大會在深圳福田希爾頓酒店成功召開。本屆大會以“聚勢AI共啟智慧零售新生態”為主題&#xff0c;匯聚了來自北京大學、騰訊云、百果園、舍得酒業、美宜佳等眾多知名企業與機構的專家代表&#xff0c;共同探討A…

QEMU使用Qemu-Guest-Agent傳輸文件、執行指令等

簡介 之前介紹過qemu傳輸文件,使用的掛載 / samba方式 :Qemu和宿主機不使用外網進行文件傳輸。 這是一種方式,這里還有另一種方式:使用Qemu-Guest-Agent,后面簡稱qga。 官網介紹:https://www.qemu.org/docs/master/interop/qemu-ga.html 安裝 這里有一篇參考文章,會…

HTML 核心標簽全解析:從文本排版到媒體嵌入

在網頁開發中&#xff0c;HTML&#xff08;超文本標記語言&#xff09;是構建頁面結構的基石。掌握各類核心標簽的用法&#xff0c;是實現頁面內容有序呈現、提升用戶體驗的關鍵。本文將系統講解 HTML 中最常用的幾類標簽 —— 段落標簽、文本格式標簽、列表標簽、表格&#xf…

[后端快速搭建]基于 Django+DeepSeek API 快速搭建智能問答后端

在 AI 應用開發中&#xff0c;將大模型 API 與 Web 框架結合是常見需求。本文將詳細記錄如何使用 Django 搭建后端服務&#xff0c;并集成 DeepSeek API 實現智能問答功能&#xff0c;包含環境配置、路由設計、API 調用及異常處理的完整流程&#xff0c;適合需要快速搭建 AI 問…

R 語言 + 卒中 Meta 分析

R 語言 卒中 Meta 分析&#xff1a;4 類核心場景完整代碼&#xff08;含藥物對比 / 劑量風險&#xff09; 卒中&#xff08;缺血性 / 出血性&#xff09;的臨床決策高度依賴循證證據&#xff0c;而 Meta 分析是整合多中心研究結果的核心工具。本文以卒中臨床研究為核心&#x…

Goframe 框架下HTTP反向代理并支持MCP所需的SSE協議的實現

一、需求背景 Go 語言開發 MCP 服務&#xff0c;并在 Goframe 框架下實現 Http 反向代理&#xff0c;代理該 MCP 服務。 二、效果演示 三、Goframe框架簡介 GoFrame 是一款模塊化、低耦合設計、高性能的Go 語言開發框架。包含了常用的基礎組件和開發工具&#xff0c;既可以作…

Git將多筆patch合并成一筆

一、方法1、在你的代碼中把這多筆patch都打上2、git reset到origin那一筆(默認模式&#xff0c;不帶soft或者hard)3、再add和commit&#xff0c;push二、種模式對比模式命令示例影響范圍適用場景--softgit reset --soft HEAD~1僅移動 HEAD&#xff0c;保留修改在暫存區修改提交…

【SpringBoot】Dubbo、Zookeeper

文章目錄前提知識概要分布式系統單體架構垂直應用架構分布式架構流式架構RPCDubbo概念Dubbo環境搭建Zookeeper測試 ZookeeperWindow環境下使用Dubbo-admin版本匹配不對服務注冊實戰內容總結導入相關依賴選擇 Zookeeper 版本配置并啟用 Zookeeper創建服務接口和實現(DubboServic…

【不說廢話】pytorch張量相對于numpy數組的優勢

核心關系 我們首先需要了解&#xff1a;PyTorch 張量在設計上深受 NumPy 數組的影響&#xff0c;它們共享許多相似的 API 和概念。實際上&#xff0c;PyTorch 張量可以看作是支持 GPU 加速和自動求導功能的 NumPy 數組。PyTorch 張量的主要優勢 1. GPU 加速支持&#xff08;最重…

拼團小程序源碼分享拼團余額提現小程序定制教程開發源碼二開

功能詳細說明&#xff08;一&#xff09;首頁功能進入首頁&#xff0c;可看到以下核心功能&#xff1a;1、優惠券&#xff0c;錢包&#xff0c;簽到&#xff0c;拼團&#xff0c;分銷等各種功能入口2、推薦的商品和活動3、下方功能欄的各種功能&#xff08;二&#xff09;客服功…

pikachu之XSS

XSS&#xff08;跨站腳本&#xff09;概述Cross-Site Scripting 簡稱為“CSS”&#xff0c;為避免與前端疊成樣式表的縮寫"CSS"沖突&#xff0c;故又稱XSS。一般XSS可以分為如下幾種常見類型&#xff1a;1.反射性XSS;2.存儲型XSS;3.DOM型XSS;XSS漏洞一直被評估為web漏…

【Element Plus `el-select` 下拉菜單響應式定位問題深度解析】

Element Plus el-select 下拉菜單響應式定位問題深度解析 本文檔旨在深入剖析一個在響應式布局中常見的 UI 問題&#xff1a;如何確保一個靠近屏幕邊緣的 el-select 組件的下拉菜單&#xff0c;在任何屏幕尺寸下都能以預期的、優雅的方式顯示。 1. 需求背景 在一個大屏數據展示…

Qt 項目文件(.pro)中添加 UI 文件相關命令

在 Qt 的 .pro 項目文件中&#xff0c;處理 UI 文件&#xff08;.ui 文件&#xff09;通常需要以下配置&#xff1a; 基本 UI 文件配置 自動包含 UI 文件&#xff1a; qmake FORMS yourfile.ui \anotherfile.ui Qt 構建系統會自動使用 uic&#xff08;用戶界面編譯器&#xff…

展會回顧 | 聚焦醫療前沿 , 禮達先導在廣州醫博會展示類器官自動化培養技術

8月22-24日&#xff0c;廣州醫博會在廣交會展館B區圓滿落幕。此次盛會匯聚了來自全球醫療健康領域的頂尖專家學者、企業代表與合作伙伴。展會內容涵蓋基礎研發、臨床應用、前沿技術、產業轉化、醫療服務及金融支持&#xff0c;全景呈現醫療健康產業的創新生態&#xff0c;成為連…

華為eNSP防火墻綜合網絡結構訓練.docx

1.IP及VLAN規劃情況 設備 接口 IP vlan 備注 AR1 g0/0/0 1.1.1.2/28 PPPOE g0/0/1 3.3.3.1/30 g0/0/2 114.114.114.254/24 AR2 g0/0/0 2.2.2.2/28 DHCP g0/0/1 3.3.3.2/30 g0/0/2 100.100.100.254/24 FW1 g1/0/0 10.0.0.1/30 tr…

從 Oracle 到 TiDB,通過ETL工具,高效實現數據拉通

在當前企業數字化轉型的浪潮中&#xff0c;打破數據孤島、實現異構數據庫間的數據高效流轉已成為提升業務敏捷性與決策效率的關鍵。許多企業在要將 Oracle 數據庫中的海量數據準確地同步至TiDB 分布式數據庫時遇到了挑戰。這一過程不僅要求數據的絕對一致性&#xff0c;還對同步…

Effective c++ 35條款詳解

您問到了最關鍵的一點&#xff01;這正是策略模式的精妙之處——它通過組合&#xff08;composition&#xff09;而非繼承&#xff08;inheritance&#xff09;來實現多態效果。讓我詳細解釋這是如何工作的&#xff0c;以及它與傳統繼承多態的區別。&#x1f504; 策略模式如何…

51c自動駕駛~合集19

自己的原文哦~ https://blog.51cto.com/whaosoft/11793894 #DRAMA 首個基于Mamba的端到端運動規劃器 運動規劃是一項具有挑戰性的任務&#xff0c;在高度動態和復雜的環境中生成安全可行的軌跡&#xff0c;形成自動駕駛汽車的核心能力。在本文中&#xff0c;我…

大數據新視界 -- Hive 數據倉庫:架構深度剖析與核心組件詳解(上)(1 / 30)

&#x1f496;&#x1f496;&#x1f496;親愛的朋友們&#xff0c;熱烈歡迎你們來到 青云交的博客&#xff01;能與你們在此邂逅&#xff0c;我滿心歡喜&#xff0c;深感無比榮幸。在這個瞬息萬變的時代&#xff0c;我們每個人都在苦苦追尋一處能讓心靈安然棲息的港灣。而 我的…