leetcode|被一道美團(tuán)面試題轉(zhuǎn)暈
今天為大家講解 LeetCode 第 48 題,是一道中等難度的題目。曾有讀者面試美團(tuán)被問到過,來搞一波~
題目描述
給定一個(gè) n × n 的二維矩陣表示一個(gè)圖像。
將圖像順時(shí)針旋轉(zhuǎn) 90 度。
說明:
你必須在原地旋轉(zhuǎn)圖像,這意味著你需要直接修改輸入的二維矩陣。請(qǐng)不要使用另一個(gè)矩陣來旋轉(zhuǎn)圖像。
示例 1:
給定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ],
原地旋轉(zhuǎn)輸入矩陣,使其變?yōu)? [ [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] ],
原地旋轉(zhuǎn)輸入矩陣,使其變?yōu)? [ [15,13, 2, 5], [14, 3, 4, 1], [12, 6, 8, 9], [16, 7,10,11] ]
來源:力扣(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)注明出處。
解題思路
這道題有點(diǎn)難度,我之前也沒怎么了解,這旋轉(zhuǎn)真是把我轉(zhuǎn)暈了,看的別人的題解慢慢想想畫畫的虧弄懂了。
這里借用下@讀書就是賺錢 ?的現(xiàn)成圖,我就不畫了,如侵必刪。


理解了思路但是寫代碼還是很多細(xì)節(jié)容易出錯(cuò),不清楚的可以debug調(diào)試看看
//go
func?rotate(matrix?[][]int)??{
?length?:=?len(matrix[0])
?var?tmp?int
?for?start,end?:=?0,?length-1;?start?//層的控制
??for?s,?e?:=?start,?end;?s?//某一層的四個(gè)點(diǎn)的旋轉(zhuǎn)
???tmp?=?matrix[start][s]?//記錄左上
???matrix[start][s]?=?matrix[e][start]?//左上=左下
???matrix[e][start]?=?matrix[end][e]?//左下=右下
???matrix[end][e]?=?matrix[s][end]?//右下=右上
???matrix[s][end]?=?tmp?//右上=左上
???s++
???e--
??}
??start++
??end--
?}
}
//java
class?Solution?{
????public?void?rotate(int[][]?matrix)?{
????????int?temp=-1;
????????for(int?start=0,end=matrix[0].length-1;start????????????for(int?s=start,e=end;s????????????????temp=matrix[start][s];
????????????????matrix[start][s]=matrix[e][start];
????????????????matrix[e][start]=matrix[end][e];
????????????????matrix[end][e]=matrix[s][end];
????????????????matrix[s][end]=temp;
????????????};
????????};
????}
}
另外還有個(gè)思路:向右旋轉(zhuǎn)90°,可以理解為先上下翻轉(zhuǎn),再沿對(duì)角線翻轉(zhuǎn)(或者先沿對(duì)角線翻轉(zhuǎn),再左右翻轉(zhuǎn))

這個(gè)代碼就不給出,留給大家當(dāng)個(gè)練習(xí)吧?
鄭重聲明:
所展示代碼已通過 LeetCode 運(yùn)行通過,請(qǐng)放心食用~
推薦閱讀
站長(zhǎng) polarisxu
自己的原創(chuàng)文章
不限于 Go 技術(shù)
職場(chǎng)和創(chuàng)業(yè)經(jīng)驗(yàn)
Go語言中文網(wǎng)
每天為你
分享 Go 知識(shí)
Go愛好者值得關(guān)注
