列表

详情


1886. 判断矩阵经轮转后是否一致

给你两个大小为 n x n 的二进制矩阵 mattarget 。现 以 90 度顺时针轮转 矩阵 mat 中的元素 若干次 ,如果能够使 mat 与 target 一致,返回 true ;否则,返回 false

 

示例 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 一致。

 

提示:

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: bool findRotation(vector<vector<int>>& mat, vector<vector<int>>& target) { } };

golang 解法, 执行用时: 0 ms, 内存消耗: 2.4 MB, 提交时间: 2021-07-22 15:10:50

func findRotation(mat [][]int, target [][]int) bool {
    n := len(mat)
    for k := 0; k < 4; k++ {
        for i := 0; i < n / 2; i++ {
            for j := 0; j < (n + 1) / 2; j++ {
                temp := mat[i][j]
                mat[i][j] = mat[n-1-j][i]
                mat[n-1-j][i] = mat[n-1-i][n-1-j]
                mat[n-1-i][n-1-j] = mat[j][n-1-i]
                mat[j][n-1-i] = temp
            }
        }
        if equal(mat, target) {
            return true
        }
    }
    return false
}

func equal(a, b [][]int) bool {
    n := len(a)
    for i := 0; i < n; i++ {
        for j := 0; j < n; j++ {
            if a[i][j] != b[i][j] {
                return false
            }
        }
    }
    return true
}

上一题