美文网首页
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