• 老卫带你学---leetcode刷题(48. 旋转图像)


    48. 旋转图像

    问题:

    给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

    你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

    示例 1:
    
    
    输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
    输出:[[7,4,1],[8,5,2],[9,6,3]]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    示例 2:
    
    
    输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
    输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    提示:
    
    n == matrix.length == matrix[i].length
    1 <= n <= 20
    -1000 <= matrix[i][j] <= 1000
    
    • 1
    • 2
    • 3
    • 4
    • 5

    解决:

    对于旋转类的的问题:
    顺时针旋转90:先沿对角线反转矩阵,再沿竖中轴线反转矩阵;
    顺时针旋转180:先沿横中轴线反转矩阵,再沿竖中轴线反转矩阵;
    顺时针旋转270:先沿对角线反转矩阵,再沿横中轴线反转矩阵;

    idx, halfLen := len(matrix)-1, len(matrix) / 2 // 记录最后一个元素的下标和边长的一半
    
    // 按对角线反转矩阵
    for i := range matrix {
        for j := 0; j < i; j++ {
            matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
        }
    }
    
    // 按竖中轴线反转矩阵
    for i := range matrix {
        for j := 0; j < halfLen; j++ {
            matrix[i][j], matrix[i][idx-j] = matrix[i][idx-j], matrix[i][j]
        }
    }
    
    // 按横中轴线反转矩阵
    for i := 0; i < helfLen; i++ {
        for j := range matrix[i] {
            matrix[idx-i][j], matrix[i][j] = matrix[i][j], matrix[idx-i][j]
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    所以对于这道题,只需要先按对角线反转,再按照竖中轴反转就行

    func rotate(matrix [][]int)  {
    	idx,half_len := len(matrix)-1,len(matrix)/2
    
    	// 按对角线反转矩阵
    	for i:= range matrix{
    		for j:=0;j<i;j++{
    			matrix[i][j],matrix[j][i]=matrix[j][i],matrix[i][j]
    		}
    	}
    
    	for i:= range matrix{
    		for j:=0;j<half_len;j++{
    			matrix[i][j],matrix[i][idx-j]=matrix[i][idx-j],matrix[i][j]
    		}
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
        def rotate(self, matrix: List[List[int]]) -> None:
            index,half=len(matrix)-1,len(matrix)//2
    
            for i in range(len(matrix)):
                for j in range(i):
                    matrix[i][j],matrix[j][i]=matrix[j][i],matrix[i][j]
            
            for i in range(len(matrix)):
                for j in range(half):
                    matrix[i][j],matrix[i][index-j]=matrix[i][index-j],matrix[i][j]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    【源码】Vue.js 官方脚手架 create-vue 是怎么实现的?
    若依前后分离版框架下Springboot java引入Mqtt接受发送消息
    磁盘调度算法例题解析以及C语言实现
    硅谷并购中的牙刷测试
    HamsterBear 构建可启动的镜像(更新中)
    C++ Primer 第4章 表达式
    【ppt技巧】批量修改ppt中的字体
    LightDB版本发布 13.8-23.3
    python多版本py命令及虚拟环境管理
    大数据-玩转数据-Flink状态编程(上)
  • 原文地址:https://blog.csdn.net/yixieling4397/article/details/133902905