力扣原题:面试题 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]]