LeetCode熱題100--54.螺旋矩陣--中等

1. 題目

給你一個 m 行 n 列的矩陣 matrix ,請按照 順時針螺旋順序 ,返回矩陣中的所有元素。

示例 1:
請添加圖片描述

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

示例 2:

請添加圖片描述

輸入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
輸出:[1,2,3,4,8,12,11,10,9,5,6,7]

2. 題解

class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> result = new ArrayList<>();if(matrix == null || matrix.length == 0 || matrix[0].length == 0){return result;}int top = 0, bottom = matrix.length - 1; //上下邊界int left = 0, right = matrix[0].length - 1; //左右邊界while(top <= bottom && left <= right){//從左到右遍歷當前的上邊界for(int i = left; i <= right; i++){result.add(matrix[top][i]);}top++; //上邊界縮小//從上到下遍歷當前右邊界for(int i = top; i <= bottom; i++){result.add(matrix[i][right]);}right--; //右邊界縮小//從右到左遍歷當前下邊界(需要檢查上下邊界是否相交)if(top <= bottom){for(int i = right; i >= left; i--){result.add(matrix[bottom][i]);}bottom--; //下邊界縮小}//從下往上遍歷當前左邊界(需要檢查左右邊界是否相交)if(left <= right){for(int i = bottom; i>=top; i--){result.add(matrix[i][left]);}left++; //左邊界縮小}}return result;}}

3. 解析

  1. List result = new ArrayList<>();
    初始化一個空列表來存儲結果,因為我們從左上角開始以螺旋的順序遍歷矩陣。

  2. if(matrix == null || matrix.length == 0 || matrix[0].length == 0) return result;
    如果輸入的矩陣為空或者沒有元素,則返回已經初始化的空列表。

  3. int top = 0, bottom = matrix.length - 1; int left = 0, right = matrix[0].length - 1;
    定義四個變量來表示矩陣的邊界。頂部、底部、左側和右側分別對應行號和列號,用于跟蹤遍歷過程中的位置。

  4. while(top <= bottom && left <= right) { … }
    這段代碼使用循環來以螺旋的順序訪問矩陣,從外到內進行遍歷。條件是邊界沒有相交(即,我們還沒有完全遍歷完整個矩陣)。

  5. for(int i = left; i <= right; i++) { result.add(matrix[top][i]); } top++;
    從頂部行的左側到右側的元素進行循環遍歷,并將它們添加到結果列表中。然后,上邊界向下移動一步(因為我們已經訪問了這一行中的所有元素)。

  6. for(int i = top; i <= bottom; i++) { result.add(matrix[i][right]); } right–;
    從右側列的頂部到底部的元素進行循環遍歷,并將它們添加到結果列表中。然后,有邊界向左移動一步(因為我們已經訪問了這一列中的所有元素)。

  7. if(top <= bottom) { for(int i = right; i >= left; i–) { result.add(matrix[bottom][i]); } bottom–; }
    如果頂部和底部沒有相交,說明我們還沒有遍歷完最外層的矩陣。這段代碼從右側行的底部到底部的元素進行循環遍歷(向后移動)并將它們添加到結果列表中。然后,下邊界向上移動一步。

  8. if(left <= right) { for(int i = bottom; i >= top; i–) { result.add(matrix[i][left]); } left++; }
    如果左側和右側沒有相交,說明我們還沒有遍歷完最外層的矩陣。這段代碼從底部行的左側到頂部的元素進行循環遍歷(向下移動)并將它們添加到結果列表中。然后,左邊界向右移動一步。

  9. return result;
    在訪問完整個矩陣后,返回最終的結果列表。

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

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

相關文章

別卷手柄了!跨平臺VR遙操系統實現仿真

我們構建了一個基于 Quest 3 的 VR 遙操系統&#xff0c;該系統能夠同時支持 DISCOVERSE 仿真環境與 MMK2 真機的操控&#xff0c;實現了從虛擬環境到真實機器人系統的無縫對接。 ? 基于 VR 實現的遙操系統具有良好的擴展性和便攜性&#xff0c;為多場景應用提供了靈活的操作方…

Linux復習筆記(一)基礎命令和操作

遇到的問題&#xff0c;都有解決方案&#xff0c;希望我的博客能為你提供一點幫助。 一、Linux中的基礎命令和操作&#xff08;約30%-40%) 1.用戶和組&#xff08;5%左右&#xff09; 1.1用戶簡介&#xff08;了解&#xff09; 要求&#xff1a;了解&#xff0c;知道有三個用戶…

【C語言干貨】野指針

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 前言一、什么是野指針&#xff1f;二、野指針的三大成因 1.指針未初始化2.指針越界訪問2.指針指向已釋放的內存 前言 提示&#xff1a;以下是本篇文章正文內容&…

Unity:Surface Effector 2D(表面效應器 2D)

目錄 什么是表面效應器 2D&#xff1f; &#x1f3af; 它是做什么的&#xff1f; &#x1f9ea; 從第一性原理解釋它是怎么工作的 &#x1f4e6; 重要參數解釋 為什么不直接用 Rigidbody&#xff08;剛體&#xff09;來控制運動 &#xff1f; 所以什么時候該用哪個&#…

android 記錄應用內存

windows cmd下 30s 記錄一次 echo off setlocal enabledelayedexpansion set /a counter0 :loop echo %date% %time% >> meminfo.txt adb shell dumpsys meminfo packagename>> meminfo.txt timeout /t 30 /nobreak >nul set /a counter1 echo counter: !coun…

基于神經網絡的 YOLOv8、MobileNet、HigherHRNet 姿態檢測比較研究

摘要 隨著人工智能技術的飛速發展&#xff0c;基于神經網絡的姿態檢測技術在計算機視覺領域取得了顯著進展。本文旨在深入比較分析當前主流的姿態檢測模型&#xff0c;即 YOLOv8、MobileNet 和 HigherHRNet&#xff0c;從模型架構、性能表現、應用場景等多維度展開研究。通過詳…

解決HomeAssistant 無法安裝 samba share問題

最近家里樹莓派上的homeassistant 被折騰崩了&#xff0c;重新安裝過程中發現加載項“Official add-ons”里面的“samba share”、“file edit”、“Mosquitto broker”等常用組件都不能安裝。報以下錯誤&#xff1a; [supervisor.docker.interface] Cant install homeassista…

[Linux]從零開始的STM32MP157 Buildroot根文件系統構建

一、前言 在前面的教程中&#xff0c;教了大家如何移植一個LInux的內核并且正確啟動&#xff0c;我們發現Linux內核在啟動后會出現一個錯誤&#xff0c;提示我們沒有找到根文件系統。那么什么是根文件系統呢&#xff1f;之前我們使用Ubuntu編譯了STM32MP157的TF-A,UBOOT,LINUX內…

2025-05-07 學習記錄--Python-變量 + 常量 + 命名規則 + 變量的數據類型 + 數據類型

合抱之木&#xff0c;生于毫末&#xff1b;九層之臺&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、變量 ?? 多個變量的賦值 &#x1f36d; 二、常量 ?? 程序在運行的過程中&#xff0c;值永遠不會發生改變的量稱之為常量…

16.狀態模式:思考與解讀

原文地址:狀態模式&#xff1a;思考與解讀 更多內容請關注&#xff1a;深入思考與解讀設計模式 引言 在開發軟件系統時&#xff0c;特別是當對象的行為會隨著狀態的變化而變化時&#xff0c;系統往往會變得復雜。你是否遇到過這樣的情況&#xff1a;一個對象的行為在不同的狀…

從 Pretrain 到 Fine-tuning:大模型遷移學習的核心原理剖析

引言 在人工智能領域&#xff0c;大模型的出現掀起了一場技術革命。這些擁有海量參數的模型&#xff0c;如 GPT-4、PaLM 等&#xff0c;在眾多任務上展現出了驚人的能力。然而&#xff0c;訓練一個大模型需要耗費巨大的計算資源和時間&#xff0c;而且直接讓大模型處理特定領域…

Java詳解LeetCode 熱題 100(11):LeetCode 239. 滑動窗口最大值(Sliding Window Maximum)詳解

文章目錄 1. 題目描述2. 理解題目3. 解法一&#xff1a;暴力法3.1 思路3.2 Java代碼實現3.3 代碼詳解3.4 復雜度分析3.5 適用場景 4. 解法二&#xff1a;優先隊列&#xff08;最大堆&#xff09;4.1 思路4.2 Java代碼實現4.3 代碼詳解4.4 復雜度分析4.5 適用場景 5. 解法三&…

org.apache.poi——將 office的各種類型文件(word等文件類型)轉為 pdf

org.apache.poi——將 office的各種類型文件&#xff08;word等文件類型&#xff09;轉為 pdf 簡介使用方法word轉pdf 使用示例word轉pdf 簡介 使用方法 word轉pdf Maven坐標為 <dependency><groupId>com.documents4j</groupId><artifactId>documen…

二叉樹與優先級隊列

1.樹 樹是由n個數據構成的非線性結構&#xff0c;它是根朝上&#xff0c;葉朝下。 注意&#xff1a;樹形結構之中&#xff0c;子樹之間不能連接&#xff0c;不然就不構成樹形結構 1.子樹之間沒有交集 2.除了根節點以外&#xff0c;每一個節點有且只有一個父親節點 3.一個n個…

如何進行室內VR全景拍攝?

如何進行室內VR全景拍攝&#xff1f; 室內VR全景拍攝作為先進的視覺技術&#xff0c;能夠為用戶提供沉浸式的空間體驗。本文介紹如何進行室內VR全景拍攝&#xff0c;并闡述眾趣科技在這一領域的技術支持和服務優勢。 室內VR全景拍攝基礎 1. 室內VR全景拍攝概述 室內VR全景拍…

如何通過代理 IP 實現異地直播推流

在直播行業日益火爆的今天&#xff0c;許多主播希望突破地域限制&#xff0c;實現異地直播推流&#xff0c;以獲得更廣泛的觀眾群體和更好的直播效果。代理 IP 作為一種有效的網絡工具&#xff0c;能夠幫助主播輕松達成這一目標。本文將詳細介紹如何通過代理 IP 實現異地直播推…

隨機變量數字特征

主要介紹一維隨機變量期望和方差、二維隨機變量期望和方差、以及協方差相關公式&#xff0c;及推導。 一維隨機變量 以一個拋硬幣的場景作為例子&#xff0c;如下&#xff1a; 拋擲兩枚均勻硬幣&#xff0c;如果兩枚都是正面向上&#xff0c;則贏得2元&#xff0c;否則就輸掉…

上傳圖片后,如何調用API進行商品搜索?

以下是一個完整的示例&#xff0c;展示如何在上傳圖片后調用淘寶按圖搜索商品&#xff08;拍立淘&#xff09;API進行商品搜索&#xff1a; 1. 準備工作 注冊賬號并獲取API密鑰&#xff1a;在淘寶開放平臺注冊賬號&#xff0c;創建應用&#xff0c;獲取app_key和app_secret。 …

Android 數據持久化之 Room 數據庫存儲

一、簡介 Room 是 Google 推出的 Android 持久層框架,建立在 SQLite 之上,提供了一個抽象層,簡化了數據庫操作。它通過注解和編譯時檢查來確保數據操作的正確性。 Room 主要由以下三個組件組成: Entity(實體):定義封裝實際數據的實體類,每個實體類對應數據庫中的一個…

react中的用法——setDisabled dva dispatch effects

setDisabled 在react中&#xff0c;setDisabled通常是指通過狀態管理來控制某個組件&#xff08;如按鈕、輸入框等&#xff09;的禁用狀態。雖然react本身沒有內置的setDisabled方法&#xff0c;但你可以使用useState鉤子來實現類似的功能。以下是一個簡單的示例&#xff0c;展…