面試題 01.07. 旋轉矩陣:翻轉矩陣法golang實現
阿新 • • 發佈:2021-01-27
力扣原題:面試題 01.07. 旋轉矩陣
給你一幅由N × N
矩陣表示的影象,其中每個畫素的大小為 4 位元組。請你設計一種演算法,將影象旋轉 90 度。
不佔用額外記憶體空間能否做到?
根據官方解法三實現:
解題思路:
1、首先按找對角線翻轉,即求矩陣的轉置。
2、繼續對矩陣的轉置進行水平翻轉根據中心軸。
複雜度分析:時間複雜度,空間複雜度
//旋轉矩陣90度 func rotateMatrix(nums [][]int) [][]int { //按照對角線翻轉,即求矩陣的轉置。 length := len(nums) for i := 0; i < length; i++ { for j := 0; j < i; j++ { nums[i][j], nums[j][i] = swap(nums[i][j], nums[j][i]) } } //繼續水平翻轉按照中心軸 for m := 0; m < length; m++ { for n := 0; n < length/2; n++ { nums[m][n], nums[m][length-n-1] = swap(nums[m][n], nums[m][length-n-1]) } } return nums }
測試:
funct main(){ a := [][]int{ {0, 1, 2, 3}, /* 第一行索引為 0 */ {4, 5, 6, 7}, /* 第二行索引為 1 */ {8, 9, 10, 11}, /* 第三行索引為 2 */ {12, 13, 14, 15}, } b := [][]int{ {1, 2, 3}, /* 第一行索引為 0 */ {4, 5, 6}, /* 第二行索引為 1 */ {7, 8, 9}, /* 第三行索引為 2 */ } fmt.Println(rotateMatrix(a)) fmt.Println(rotateMatrix(b)) }
>>
[ [12 8 4 0]
[13 9 5 1]
[14 10 6 2]
[15 11 7 3] ]
[[7 4 1] [8 5 2] [9 6 3]]