力扣經典算法篇-41-旋轉圖像(輔助數組法,原地旋轉法)

1、題干

給定一個 n × n 的二維矩陣 matrix 表示一個圖像。請你將圖像順時針旋轉 90 度。
你必須在 原地 旋轉圖像,這意味著你需要直接修改輸入的二維矩陣。請不要 使用另一個矩陣來旋轉圖像。

示例 1:
在這里插入圖片描述
輸入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
輸出:[[7,4,1],[8,5,2],[9,6,3]]

示例 2:
在這里插入圖片描述
輸入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
輸出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]

提示:
n == matrix.length == matrix[i].length
1 <= n <= 20
-1000 <= matrix[i][j] <= 1000

2、解題

旋轉數組,我們根據示例可以發現:原本的第一行數據旋轉變成了最后一列;第二行的數據變成了倒數第二列;依次類推。
結合具體的數組找規律可以發現:
假設n=4,規律:3,0–>0,0 2,0–>0,1 1,0–>0,2 0,0–>0,3
從索引的角度可以發現:前元素的行=新元素的列; 新元素的列+前元素的行=n-1

方法一:(輔助數組法)

使用輔助數組,保持和原數組相同的數據。可以借助輔助數組對原始數組快速賦值。
規律:
旋轉后元素的行為之前的列;旋轉后元素的列+之前的行=n-1

技巧:
需要結合當n=3和n=4的簡單場景下,自己找規律,不能懶。

代碼示例:

import java.util.Arrays;public class Test47 {// 使用輔助數組public static void rotate(int[][] matrix) {int n = matrix.length;int[][] matrixN = new int[n][n];for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {matrixN[i][j] = matrix[i][j];  // 輔助數組保持相同的數據}}// 假設=4,規律:3,0-0,0  2,0-0,1  1,0-0,2  0,0-0,3// 前元素的行=新元素的列;  新元素的列+前元素的行=n-1for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {matrix[i][j] = matrixN[n-j-1][i];    // 旋轉后元素的行為之前的列;旋轉后元素的列+之前的行=n-1}}}public static void main(String[] args) {int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};rotate(matrix);System.out.println(Arrays.deepToString(matrix));}
}

方法二:(原地旋轉法)

相對輔助數組法,原地選擇法進需要一次遍歷原始數據,且輔助空間為O(1),性能更好,但是相對難度也高一點。

注意點:
(1)、一次旋轉的規律
結合簡單數據可以看出。下標位置變化如:(0,0)–>(0,5)–>(5,5)–>(5,0)–>(0,0)
可以發現相鄰的兩個數之間的內部一定相等,外部相加一定=n-1。

(2)、旋轉的次數
同一個元素會攜帶者對應的其他三個元素在一次過程中完成選擇。所以不能完全遍歷數據,會造成同一個元素多次旋轉,最終回到原始數據。
如原始為一個55的二維數組,我們只需要對如下的23的區域進行旋轉即可(或3*2的區域也一樣)。如果旋轉多了就會造成問題。
在這里插入圖片描述

代碼示例:

import java.util.Arrays;public class Test47 {public static void rotate(int[][] matrix) {int n = matrix.length;// 假設=4,規律:3,0-0,0  2,0-0,1  1,0-0,2  0,0-0,3// 前元素的行=新元素的列;  新元素的列+前元素的行=n-1for (int i = 0; i < (n + 1) / 2; i++) {    // 防止重復旋轉(旋轉一半,只能+1一次,橫+1則縱不能+1)for (int j = 0; j < n / 2; j++) {      // 防止重復旋轉int temp = matrix[i][j];matrix[i][j] = matrix[n - j - 1][i];     // 規律:外部相等,內部相加=n-1matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1];matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1];matrix[j][n - i - 1] = temp;}}}public static void main(String[] args) {int[][] matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};rotate(matrix);System.out.println(Arrays.deepToString(matrix));}
}

向陽前行,Dare To Be!!!

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

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

相關文章

譯|用戶增長策略如何使用因果機器學習的案例

來自上傳文件中的文章《[Causal Machine Learning for Growth: Loyalty Programs, LTV, and What to Do When You Can’t Experiment | by Torty Sivill | Towards AI]》 本文探討了當 A/B 測試不可行時&#xff0c;如何利用因果推斷從歷史數據中獲取洞察。技術亮點在于通過構建…

java~final關鍵字

final關鍵字final基本介紹final的使用細節final基本介紹 final是最終的意思&#xff0c;可以修飾類&#xff0c;屬性&#xff0c;方法&#xff0c;局部變量什么時候會要使用到final呢&#xff1f; 1.想要類不被繼承時 2.不希望類的某個屬性的值被改變時 3.不想父類的某個方法被…

Node.js(四)之數據庫與身份認證

數據庫與身份認證 目錄 數據庫與身份認證 十三、數據庫的基本概念 13.1 什么是數據庫 13.2 常見的數據庫及分類 13.3 傳統型數據庫的數據組織結構 1. Excel 的數據組織結構 2. 傳統型數據庫的數據組織結構 3. 實際開發中庫、表、行、字段的關系 十四、安裝并配置MySQ…

SpringBoot+SpringMVC常用注解

文章目錄發展歷程項目創建項目結構入門案例配置文件的兩種方式&#xff1a;只能使用一種創建項目二入門案例常用知識及注解Controller:類上面加&#xff0c;SpringMVC的注解GetMapping:方法上面加Spring框架的兩項核心功能Component:組件。控制反轉&#xff0c;加在業務類上面&…

標準GS相位恢復算法

標準GS相位恢復算法詳解與MATLAB實現 Gerchberg-Saxton (GS) 算法是一種經典的相位恢復方法&#xff0c;廣泛應用于光學成像、衍射成像和全息技術等領域。該算法通過迭代過程從未知相位的強度測量中恢復相位信息。 算法原理 GS算法的核心思想是利用傅里葉變換關系在空間域和頻率…

【Linux網絡編程基礎--socket地址API】

一、主機字節序和網絡字節序主機字節序&#xff08;Host Byte Order&#xff09;&#xff1a;你當前電腦的內存字節順序&#xff08;比如 x86 是小端&#xff09;網絡字節序&#xff08;Network Byte Order&#xff09;&#xff1a;統一規定為大端序&#xff08;高位字節在高位…

Linux路徑MTU發現(Path MTU Discovery, PMTU)

Linux路徑MTU發現&#xff08;Path MTU Discovery, PMTU&#xff09;機制是TCP/IP協議棧中確保數據包高效傳輸的核心技術。其核心目標是動態探測源主機到目的主機路徑上的最小MTU&#xff08;Maximum Transmission Unit&#xff09;&#xff0c;從而避免IP分片&#xff0c;提升…

【MySQL進階】------MySQL程序

MySQL程序簡介 MySQL安裝完成通常會包含如下程序&#xff1a; Linux系統程序?般在 /usr/bin?錄下&#xff0c;可以通過命令查看&#xff1a; windows系統?錄&#xff1a;你的安裝路徑\MySQL Server 8.0\bin&#xff0c;可以通過命令查看&#xff1a; 每個 MySQL 程序都有許…

Linux大頁內存導致服務內存不足

Linux大頁內存導致服務內存不足的解決方法 大頁內存&#xff08;Huge Pages&#xff09;是Linux內核提供的一種機制&#xff0c;用于減少TLB&#xff08;轉換后備緩沖區&#xff09;的壓力&#xff0c;提高內存訪問性能。然而&#xff0c;如果配置不當&#xff0c;大頁內存可能…

超寬帶測距+測角+無線通信一體化模組:智能門鎖、智能遙控器、AR頭戴、智能穿戴

超寬帶測距測角無線通信一體化模組&#xff1a;智能門鎖、智能遙控器、AR頭戴、智能穿戴UWB測距測角技術&#xff0c;因其高精度、低延遲、抗干擾能力&#xff0c;正廣泛應用于“人-物-設備”的空間感知場景&#xff0c;成為構建智能空間和精準互動的重要底層技術。代表廠商與產…

基于單片機空氣質量檢測/氣體檢測系統

傳送門 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目速選一覽表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品題目功能速覽 概述 隨著環境污染問題日益嚴重&#xff0c;空氣質量監測成為社會關注的焦點。基于單片機的空氣質量檢…

網絡安全 | 從 0 到 1 了解 WAF:Web 應用防火墻到底是什么?

&#x1f914; 寫在前面 2020年 我參加公司的安全技能大賽&#xff0c;隊友在實操環節啟用了 WAF 防火墻&#xff0c;這是我第一次接觸到 Web 應用防火墻。作為一個 Web 開發老鳥&#xff0c;真是羞愧呀&#x1f602;。 &#x1f510; Web應用防火墻 WAF 全稱是 Web Applica…

服務器突然之間特別卡,什么原因?

原因總結&#xff1a;1.一般是本地網速的問題&#xff0c;服務器網速的問題&#xff0c;服務器CPU被占滿的問題今天發現另一個會導致特別卡的問題&#xff0c;是主存占滿也會導致卡頓。解釋如下&#xff1a;當服務器的主存&#xff08;物理內存&#xff09;被完全占滿時&#x…

AI應用標準詳解:A2A MCP AG-UI

"OpenAI接入MCP&#xff0c;Google推出A2A&#xff0c;微軟與OpenAI緊密綁定"標志著云計算競爭焦點已從"算力"和"模型參數"轉向?Agent標準協議控制權?。在AI快速演進的今天&#xff0c;我們不再僅關注單個AI的智能水平&#xff0c;而是探索多個…

Web安全學習步驟

以下是Web安全專項學習步驟&#xff0c;聚焦實戰能力培養&#xff0c;分為4個階段資源清單**&#xff0c;適合從入門到進階。重點培養漏洞挖掘能力與防御方案設計雙重視角&#xff1a;---階段1&#xff1a;Web技術筑基&#xff08;1-2個月&#xff09; | 領域 | 關鍵…

Android工程命令行打包并自動生成簽名Apk

1.進入工程目錄查看所有gradle任務 2.打包debug與release 打包前先生成jks簽名文件test.jks 在工程的build.gradle中添加簽名配置 signingConfigs {release {storeFile file("/home/dev/test.jks")storePassword "111111"keyAlias "key0"keyPas…

分布式微服務--Nacos作為配置中心(一)

1.Nacos配置遠程配置中心注意總結&#xff1a;本地配置文件必須使用 bootstrap.yml 或 bootstrap.properties遠程配置的加載優先于 application.yml&#xff0c;因此必須寫在 bootstrap 配置文件中。本地配置文件中 file-extension 的取值僅支持兩種&#xff1a;properties 或 …

Linux安裝MySQL及鏈接第三方工具詳細教程,帶圖帶錯誤分析

本教程所有代碼均為root用戶權限下操作&#xff0c;如果不是root用戶&#xff0c;在代碼前加上&#xff08;sudo &#xff09;即可 一、安裝MySQL服務 準備工作&#xff1a; 有時&#xff0c;系統無法解析 部分域名&#xff0c;導致無法獲取鏡像列表&#xff0c;從而無法安裝…

WPS2024 軟件下載及安裝教程!

軟件介紹 WPS Office是一套辦公軟件套裝&#xff0c;包含WPS文字、WPS表格、WPS演示三大功能模塊&#xff0c;可以滿足常用文字處理、表格編輯和演示制作等多種辦公需求&#xff0c;以其強大的功能和用戶友好的界面贏得了眾多用戶的青睞。 軟件&#xff1a;??????WPS Of…

ESD監控系統確保工廠生產設備的靜電安全

隨著電子工業的飛速發展&#xff0c;電子產品的精密程度不斷提高&#xff0c;對生產環境的要求也日益嚴格。在許多電子制造工廠中&#xff0c;安裝和維護有效的靜電防護措施已成為保障生產安全和產品品質的關鍵。ESD監控系統作為靜電管理的核心工具&#xff0c;為確保工廠設備和…