初级算法-数组-旋转图像

作者: coenen | 来源:发表于2021-08-05 07:18 被阅读0次
    给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

    你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
    提示:
    matrix.length == n
    matrix[i].length == n
    1 <= n <= 20
    -1000 <= matrix[i][j] <= 1000

    力扣 旋转图像.jpg
    摘一个示例做个说明.
    示例 1:
    输入: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. 原地修改 -> 在原数组上操作,不能开辟新空间
    解决思路1:
    1. 根据分析1,说明是可变数组
    2. 顺时针旋转90度,说明底部的转到左边,左边的转到上边,上边的转到右边.依次转动.
    先根据图示,我们可以先采用上下交换,然后再左上,右下对角线交换即可

    代码实现-Swift版本:

    思路1代码:

    func rotate(_ matrix: inout [[Int]]) {
        // 先上下换,再对角线交换
        for i in 0 ..< matrix.count/2 {
            let tmp = matrix[i]
            matrix[i] = matrix[matrix.count - 1 - i]
            matrix[matrix.count - 1 - i] = tmp
        }
        
        for i in 0 ..< matrix.count {
            for  j in i + 1 ..< matrix[i].count {
                let tmp = matrix[i][j]
                matrix[i][j] = matrix[j][i]
                matrix[j][i] = tmp
            }
        }
    }
    
    旋转图像提交结果.jpg

    测试用例:

    var array = [[1,2,3],[4,5,6],[7,8,9]]

    到此力扣初级算法数组相关算法已经展示完了,下面会继续写一下数组相关的算法.然后再开启新的篇章.按类梳理,以点带面,以面带全,争取早日修成神功.

    考察要点:

    • 数组
    • 数学
    • 矩阵

    相关文章

      网友评论

        本文标题:初级算法-数组-旋转图像

        本文链接:https://www.haomeiwen.com/subject/lcdzmltx.html