力扣原题:面试题 01.07. 旋转矩阵

N × N

不占用额外内存空间能否做到?

 

根据官方解法三实现:

解题思路:

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]]