IOS 算法(基础篇) ----- 判断矩阵经轮转后是否一致

2021-06-10  本文已影响0人  ShawnAlex

给你两个大小为 n x n 的二进制矩阵 mat 和 target 。现 以 90 度顺时针轮转 矩阵 mat 中的元素 若干次 ,如果能够使 mat 与 target 一致,返回 true ;否则,返回 false 。
n == mat.length == target.length
n == mat[i].length == target[i].length
1 <= n <= 10
mat[i][j] 和 target[i][j] 不是 0 就是 1

建议先做一下: IOS 算法(中级篇) ----- 旋转图像

例子

例子1

输入:mat = [[0,1],[1,0]], target = [[1,0],[0,1]]
输出:true
解释:顺时针轮转 90 度一次可以使 mat 和 target 一致。

例子2

输入:mat = [[0,1],[1,1]], target = [[1,0],[0,1]]
输出:false
解释:无法通过轮转矩阵中的元素使 equal 与 target 一致。

例子3

输入:mat = [[0,0,0],[0,1,0],[1,1,1]], target = [[1,1,1],[0,1,0],[0,0,0]]
输出:true
解释:顺时针轮转 90 度两次可以使 mat 和 target 一致。

解题思路

解题思路

建议先做一下 48. 旋转图像

看个例子

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]

按照这个规律, 我们依次旋转90, 180, 270判断, 目标target是否与旋转数组相等即可

代码:

    func findRotation(_ mat: [[Int]], _ target: [[Int]]) -> Bool {
        
        if mat == target { return true }
        var time = 1, temp = mat
        
        while time < 4 {
            temp = cal(temp)
            if target == temp { return true }
            time += 1
        }
        
        return false
    }
    
    func cal(_ matrix: [[Int]]) -> [[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]
            }
        }
        
        return temp
    }

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

上一篇 下一篇

猜你喜欢

热点阅读