1. 程式人生 > 其它 >面試題 01.07. 旋轉矩陣:翻轉矩陣法golang實現

面試題 01.07. 旋轉矩陣:翻轉矩陣法golang實現

技術標籤:Go演算法

力扣原題:面試題 01.07. 旋轉矩陣

給你一幅由N × N矩陣表示的影象,其中每個畫素的大小為 4 位元組。請你設計一種演算法,將影象旋轉 90 度。

不佔用額外記憶體空間能否做到?

根據官方解法三實現:

解題思路:

1、首先按找對角線翻轉,即求矩陣的轉置

2、繼續對矩陣的轉置進行水平翻轉根據中心軸。

複雜度分析:時間複雜度O(n^{2}),空間複雜度O(1)

//旋轉矩陣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]]