力扣hot100:螺旋矩陣(邊界壓縮,方向模擬)(54)

在解決螺旋矩陣問題時,我們需要按照順時針螺旋順序遍歷矩陣,并返回所有元素。本文將分享兩種高效的解決方案:邊界收縮法和方向模擬法。

題目描述

邊界收縮法

邊界收縮法通過定義四個邊界(上、下、左、右)來模擬螺旋遍歷的過程。每完成一個方向的遍歷,就收縮對應的邊界,直到所有元素被訪問完畢。

算法思路
  1. 初始化邊界top = 0,?bottom = m-1(行數-1),?left = 0,?right = n-1(列數-1)。
  2. 按層遍歷
    • 向右:遍歷上邊界(top行),從?left?到?right
    • 向下:遍歷右邊界(right列),從?top+1?到?bottom
    • 向左:遍歷下邊界(bottom行),從?right-1?到?left+1(需確保存在內層)。
    • 向上:遍歷左邊界(left列),從?bottom?到?top+1(需確保存在內層)。
  3. 收縮邊界:完成一圈后,將?top++,?bottom--,?left++,?right--
  4. 終止條件:當邊界交錯時停止(top > bottom?或?left > right)。
代碼實現
class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> result=new ArrayList<Integer>();int x= matrix.length;int y=matrix[0].length;int left=0;int right=y-1;int top=0;int bottom=x-1;while(left<=right&&top<=bottom){for(int i=left;i<=right;i++){result.add(matrix[top][i]);}for(int i=top+1;i<=bottom;i++){result.add(matrix[i][right]);}if(left<right&&top<bottom) {for (int i = right - 1; i > left; i--) {result.add(matrix[bottom][i]);}for (int i = bottom; i > top; i--) {result.add(matrix[i][left]);}}left++;right--;top++;bottom--;}return result;}
}

復雜度分析
  • 時間復雜度:O(m*n),每個元素被訪問一次。
  • 空間復雜度:O(1),僅使用常量額外空間(結果列表不計入)。

方向模擬法(其他解決方案)

方向模擬法通過定義方向數組和記錄訪問狀態來模擬螺旋路徑,適合對邊界條件處理不熟悉的情況。

算法思路
  1. 初始化
    • 方向數組?dirs?表示右、下、左、上四個方向。
    • 訪問矩陣?visited?記錄元素是否被訪問。
    • 從?(0,0)?開始,初始方向為右。
  2. 遍歷矩陣
    • 將當前元素加入結果列表,并標記為已訪問。
    • 計算下一個位置,若越界或已訪問,則順時針轉向。
    • 更新位置并繼續遍歷,直到所有元素被訪問。
代碼實現
class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> result = new ArrayList<>();if (matrix == null || matrix.length == 0) return result;int m = matrix.length, n = matrix[0].length;boolean[][] visited = new boolean[m][n];int[][] dirs = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}}; // 右、下、左、上int r = 0, c = 0, d = 0;int total = m * n;for (int i = 0; i < total; i++) {result.add(matrix[r][c]);visited[r][c] = true;// 計算下一個位置int nr = r + dirs[d][0];int nc = c + dirs[d][1];// 若越界或已訪問,則轉向if (nr < 0 || nr >= m || nc < 0 || nc >= n || visited[nr][nc]) {d = (d + 1) % 4; // 順時針轉向nr = r + dirs[d][0];nc = c + dirs[d][1];}r = nr;c = nc;}return result;}
}

復雜度分析
  • 時間復雜度:O(m*n),每個元素訪問一次。
  • 空間復雜度:O(m*n),visited?矩陣額外占用空間。

總結

  • 邊界收縮法:通過動態調整邊界模擬螺旋路徑,無需額外空間,是更優解。
  • 方向模擬法:直觀易理解,但需要額外空間記錄訪問狀態,適合快速實現。

兩種方法均能高效解決螺旋矩陣問題,實際應用中推薦優先使用邊界收縮法!

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

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

相關文章

[嵌入式embed][Qt]Qt5.12+Opencv4.x+Cmake4.x_用Qt編譯linux-Opencv庫 測試

[嵌入式embed][Qt]Qt5.12Opencv4.xCmake4.x_用Qt編譯linux-Opencv庫 & 測試前文:準備環境安裝qt-opencv必備庫git-clone opencv庫編譯opencv庫特殊:opencv編譯的include,編譯出來后多嵌套了一層文件夾,手工處理下改為include/opencv2測試demo新建項目QOpencv3.promain.cpp百…

百度智能云「智能集錦」自動生成短劇解說,三步實現專業級素材生產

備受剪輯壓力困擾的各位自媒體老板、MCN 同學們、投放平臺大佬們&#xff0c;解放雙手和大腦的好機會它來了&#xff01; 在這個數字化飛速發展的時代&#xff0c;智能技術正以前所未有的速度改變著我們的生活與工作方式。百度智能云&#xff0c;作為智能科技的引領者&#xf…

FPGA筆試面試常考問題及答案匯總

經歷了無數的筆試面試之后&#xff0c;不知道大家有沒有發現FPGA的筆試面試還是有很多共通之處和規律可循的。所以一定要掌握筆試面試常考的問題。FPGA設計方向&#xff08;部分題目&#xff09;1. 什么是同步邏輯和異步邏輯&#xff1f;同步邏輯 是指在同一個時鐘信號的控制下…

從0開始的github學生認證并使用copilot教程(超詳細!)

目錄 一.注冊github賬號 1.1、僅僅是注冊 1.2、完善你的profile 二、Github 學生認證 郵箱 學校名稱 How do you plan to use Github? Upload Proof 學校具體信息 一.注冊github賬號 1.1、僅僅是注冊 1.用如QQ郵箱的第三方郵箱注冊github 再添加.edu結尾的教育郵箱&…

自動駕駛叉車與 WMS 集成技術方案:數據交互、協議適配與系統對接實現

自動駕駛叉車與倉庫管理系統&#xff08;WMS&#xff09;是現代物流自動化的核心。當這兩項技術協同工作時&#xff0c;倉庫將實現前所未有的效率、準確性和可擴展性。以下是利用其集成實現最佳效果的方法。 為何集成至關重要 倉庫管理在當今運營中扮演著至關重要的角色&…

“企業版維基百科”Confluence

“企業版維基百科”Confluence Confluence 是一款由澳大利亞公司 Atlassian 開發的企業級團隊協作與知識管理軟件。您可以把它理解為一個功能非常強大的 “企業版維基百科” 或 “團隊知識庫”。 它的核心目標是幫助團隊在一個統一的平臺上創建、共享、組織和討論項目文檔、會議…

QT去除顯示的紅色和黃色下劃線的辦法

在使用 Qt Creator 開發項目時,有時候會遇到這樣的情況: 代碼明明沒有錯誤,但編輯器里卻出現了紅色或黃色的下劃線提示,甚至讓人誤以為代碼有問題。其實,這通常是 Qt Creator 的代碼模型沒有及時更新 導致的,而不是項目本身的錯誤。 為什么會出現紅色和黃色下劃線? 紅…

域內的權限提升

CVE-2020-1472域內有一個服務&#xff1a;MS-NRPC&#xff08;建立與域控安全通道&#xff09;&#xff0c;可利用此漏洞獲取域管訪問權限。檢測這個漏洞能不能打&#xff0c;能打之后&#xff0c;將域控的機器hash置空&#xff0c;密碼為空&#xff0c;那么你就可以通過空的ha…

一鍵掌握服務器健康狀態與安全風險

一鍵掌握服務器健康狀態與安全風險 在服務器運維工作中,定期對系統進行全面檢查是保障服務穩定運行的關鍵環節。手動檢查不僅耗時費力,還容易遺漏關鍵指標。今天我將為大家介紹一款功能全面的系統綜合巡檢工具,只需一鍵運行,即可完成系統狀態、性能、安全等多維度檢查,并…

線性代數第一講—向量組

文章目錄考綱術語向量組的線性表示與線性相關判別線性相關性的七大定理極大線性無關組、等價向量組、向量組的秩等價矩陣和等價向量組向量空間基本概念基變換、坐標變換 考綱術語 n維向量n維行向量n維列向量分量向量相等向量的加法向量的數乘向量的內積正交向量的模單位向量標準…

涉私數據安全與可控匿名化利用機制研究(下)

文章目錄前言三、可信數據空間支撐可控匿名化機制&#xff08;一&#xff09;基于政府可信根的可控匿名化&#xff08;二&#xff09;可信數據空間“中國模式”保障數據全生命周期合規可控&#xff08;三&#xff09;可控匿名化對大模型數據可逆風險的防御機制前言 盡管《個人…

More Effective C++ 條款25:將構造函數和非成員函數虛擬化

More Effective C 條款25&#xff1a;將構造函數和非成員函數虛擬化核心思想&#xff1a;通過虛擬構造函數和非成員函數&#xff0c;實現運行時的多態行為&#xff0c;允許在不知道對象具體類型的情況下創建新對象或執行操作&#xff0c;增強代碼的靈活性和擴展性。 &#x1f6…

血緣元數據采集開放標準:OpenLineage Guides 在 Airflow 中使用 OpenLineage Proxy

OpenLineage 是一個用于元數據和血緣采集的開放標準&#xff0c;專為在作業運行時動態采集數據而設計。它通過統一的命名策略定義了由作業&#xff08;Job&#xff09;、運行實例&#xff08;Run&#xff09;和數據集&#xff08;Dataset&#xff09; 組成的通用模型&#xff0…

【Linux】網絡(中)

目錄1. 序列化和反序列化1.1 序列化1.2 反序列化2. 網絡版本計算器&#xff08;自定義協議&#xff09;3. 再次理解OSI七層模型4. HTTP協議4.1 HTTP協議格式4.2 HTTP的方法4.3 HTTP的狀態碼4.4 HTTP常見Header4.5 長連接和短連接4.6 Cookie5. HTTPS協議5.1 對稱加密和非對稱加密…

AI 寫作實戰:用 GPT-4o+ Claude 3 生成小紅書文案,轉化率提升 30%

引言?AI 寫作開啟小紅書營銷新引擎在社交媒體營銷的浪潮中&#xff0c;小紅書以其獨特的社區氛圍和龐大的年輕用戶群體&#xff0c;成為品牌推廣的關鍵陣地。然而&#xff0c;撰寫既吸引眼球又能高效轉化的文案并非易事&#xff0c;傳統人工編寫不僅耗時費力&#xff0c;還難以…

一個月漲粉30萬,Coze智能體一鍵生成民間傳說爆款視頻,3分鐘上手

最近發現一個賬號&#xff0c;用AI將民間傳說故事轉化為生動視頻&#xff0c;短短一個月漲粉30萬&#xff0c;條均播放 量破百萬。這種視頻制作真的需要專業團隊嗎&#xff1f;今天教大家用Coze智能體工作流&#xff0c;一鍵生成 爆款民間故事視頻&#xff01;工作流功能 用Coz…

Linux arm64 PTE contiguous bit

文章目錄一、簡介1.1 contiguous PTE1.2 demo二、Linux 內核中的實現2.1 宏定義2.2 __create_pgd_mapping2.2.1 alloc_init_cont_pmdinit_pmd2.2.2 alloc_init_cont_pteinit_pte2.3 hugetlbpage2.3.1 find_num_contig2.3.2 num_contig_ptes2.3.3 huge_pte_offset2.3.4 huge_pte…

深入分析 json2(新)與標準的 jsonrpc的區別

這兩個模塊都用于實現 JSON 風格的遠程過程調用&#xff08;RPC&#xff09;接口&#xff0c;但設計哲學、使用方式、安全性和現代化程度有顯著差異。 &#x1f4c2; 對比背景 文件 功能 來源 jsonrpc.py 標準的 JSON-RPC 2.0 兼容接口 Odoo 內核已有邏輯 json2.py 自定…

IO_HW_9_3

一、使用消息隊列實現兩個程序間的相互通信二、思維導圖三、牛客網

fastlio配置與過程中遇到的問題

&#x1f680; Fast-LIO 安裝與運行指南 我之前已經創建并使用原有的工作空間 catkin_ws,如果沒有創建一個。 使用環境 ubantu20.04 ros1 noetic版本 我作的是要在已有的 ~/catkin_ws 中編譯 原版 FAST-LIO&#xff08;來自 HKU-MARS 官方倉庫&#xff09;。 最終下載官方文檔中…