LeetCode-048-旋轉(zhuǎn)圖像

題目描述:給定一個(gè) n × n 的二維矩陣 matrix 表示一個(gè)圖像。請(qǐng)你將圖像順時(shí)針旋轉(zhuǎn) 90 度。
你必須在 原地 旋轉(zhuǎn)圖像,這意味著你需要直接修改輸入的二維矩陣。請(qǐng)不要 使用另一個(gè)矩陣來(lái)旋轉(zhuǎn)圖像。
示例說(shuō)明請(qǐng)見(jiàn)LeetCode官網(wǎng)。
來(lái)源:力扣(LeetCode) ??
鏈接:https://leetcode-cn.com/problems/rotate-image/ ??
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
解法一:數(shù)組遍歷
首先,尋找規(guī)律,找到當(dāng)前節(jié)點(diǎn)要替換到哪個(gè)位置,尋找到的規(guī)律是
(x, y)
位置的數(shù)字經(jīng)過(guò)順時(shí)針旋轉(zhuǎn)90度之后要放在(y, matrix.length - 1 - x)
這個(gè)位置,然后還有一個(gè)規(guī)律是,順時(shí)針旋轉(zhuǎn)90度時(shí),其實(shí)是每4個(gè)節(jié)點(diǎn)旋轉(zhuǎn)了一周,所以具體的處理過(guò)程如下:
根據(jù)規(guī)律獲取應(yīng)該被替換的節(jié)點(diǎn)
(nextX, nextY)
,判斷這個(gè)節(jié)點(diǎn)是否已經(jīng)被替換:
如果已經(jīng)被替換過(guò),則遍歷數(shù)組,尋找下一個(gè)未被替換的節(jié)點(diǎn),并且初始化x和y為當(dāng)前節(jié)點(diǎn)的坐標(biāo),temp為當(dāng)前節(jié)點(diǎn)的值,然后進(jìn)行下一次處理;
如果沒(méi)有被替換過(guò),則將當(dāng)前節(jié)點(diǎn)的值替換為last,并用last記錄替換之前的值,然后更新x和y為當(dāng)前值的坐標(biāo),并更新當(dāng)前位置為true即已替換,并將count減一。
循環(huán)中斷的條件就是count為0,即已經(jīng)將所有節(jié)點(diǎn)都處理完成。
【每日寄語(yǔ)】 愿你昨晚的壞情緒,在今日掀開(kāi)被子,拉開(kāi)窗簾的那一刻,杳無(wú)蹤影。