美文网首页
IOS 算法(中级篇) ----- 旋转图像

IOS 算法(中级篇) ----- 旋转图像

作者: ShawnAlex | 来源:发表于2021-06-10 10:48 被阅读0次

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

    例子:

    例子1

    输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
    输出:[[7,4,1],[8,5,2],[9,6,3]]

    例子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 (A[0][0], A[0][1], A[0][2])
    4, 5, 6 (A[1][0], A[1][1], A[1][2])
    7, 8, 9 (A[2][0], A[2][1], A[2][2])

    7, 4, 1 (A[2][0], A[1][0], A[0][0])
    8, 5, 2 (A[2][1], A[1][1], A[0][1])
    9, 6, 3 (A[2][2], A[1][2], A[0][2])

    其实可以看出规律, 90度转换后, 原来的A[i][j] → A[j][matrix.count - 1 - i]
    按照这个规律有

    代码:

        func rotate(_ matrix: inout [[Int]]) {
            
            var temp = Array(repeating: Array(repeating: 0, count: matrix.count), count: matrix.count)
            
            for i in 0..<matrix.count {
                for j in 0..<matrix[i].count {
                    temp[j][matrix.count - 1 - i] = matrix[i][j]
                }
            }
            
            matrix = temp
        }
    

    方法二

    还是下面的例子, 针对每一项A[i][j], 做一次下标互换即A[i][j] → A[j][i]

    1, 2, 3
    4, 5, 6
    7, 8, 9

    1, 4, 7
    2, 5, 8
    3, 6, 9

    那么多对于我们的想要的结果, 只需要遍历每一行, 将每一行倒序就可以

    7, 4, 1
    8, 5, 2 (目标)
    9, 6, 3

    其实可以看出规律, 90度转换后, 原来的A[i][j] → A[j][matrix.count - 1 - i]
    按照这个规律有

        func rotate(_ matrix: inout [[Int]]) {
            
            var temp = Array(repeating: Array(repeating: 0, count: matrix.count), count: matrix.count)
            
            for i in 0..<matrix.count  {
                for j in 0..<matrix[i].count {
                    temp[i][j] = matrix[j][i]
                }
            }
            
            for i in 0..<temp.count {
                matrix[i] = temp[i].reversed()
            }
        }
    
    

    题目来源:力扣(LeetCode) 感谢力扣爸爸 :)
    IOS 算法合集地址

    相关文章

      网友评论

          本文标题:IOS 算法(中级篇) ----- 旋转图像

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