列表

详情


100139. 循环移位后的矩阵相似检查

给你一个大小为 m x n 的整数矩阵 mat 和一个整数 k 。请你将矩阵中的 奇数 行循环 k 次,偶数 行循环 k 次。

如果初始矩阵和最终矩阵完全相同,则返回 true ,否则返回 false

 

示例 1:

输入:mat = [[1,2,1,2],[5,5,5,5],[6,3,6,3]], k = 2
输出:true
解释:


初始矩阵如图一所示。
图二表示对奇数行右移一次且对偶数行左移一次后的矩阵状态。
图三是经过两次循环移位后的最终矩阵状态,与初始矩阵相同。
因此,返回 true 。

示例 2:

输入:mat = [[2,2],[2,2]], k = 3
输出:true
解释:由于矩阵中的所有值都相等,即使进行循环移位,矩阵仍然保持不变。因此,返回 true 。

示例 3:

输入:mat = [[1,2]], k = 1
输出:false
解释:循环移位一次后,mat = [[2,1]],与初始矩阵不相等。因此,返回 false 。

 

提示:

原站题解

去查看

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

python3 解法, 执行用时: 60 ms, 内存消耗: 16 MB, 提交时间: 2023-11-26 14:54:27

class Solution:
    def areSimilar(self, mat: List[List[int]], k: int) -> bool:
        n = len(mat[0]) # 列数
        for i, row in enumerate(mat): # 循环每一行
            for j in range(n):
                if mat[i][j] != mat[i][(j + k) % n]:
                    return False
        return True

php 解法, 执行用时: 40 ms, 内存消耗: 19.3 MB, 提交时间: 2023-11-26 14:57:12

class Solution {

    /**
     * @param Integer[][] $mat
     * @param Integer $k
     * @return Boolean
     */
    function areSimilar($mat, $k) {
        $n = count($mat[0]);
        $m = count($mat);
        for ( $i = 0; $i < $m; $i++ ) {
            for ( $j = 0; $j < $n; $j++ ) {
                if ( $mat[$i][$j] != $mat[$i][($j + $k) % $n] ) return false;
            }
        }
        return true;
    }
}

python3 解法, 执行用时: 40 ms, 内存消耗: 16.2 MB, 提交时间: 2023-11-26 14:58:12

class Solution:
    def areSimilar(self, mat: List[List[int]], k: int) -> bool:
        k %= len(mat[0])
        if k == 0: return True
        for i, r in enumerate(mat):
            r0 = r.copy()
            if i % 2 == 0:
                r = r[k:] + r[:k]
            else:
                r = r[-k:] + r[:-k]
            if r != r0:
                return False
        return True

golang 解法, 执行用时: 12 ms, 内存消耗: 5.4 MB, 提交时间: 2023-11-26 14:58:38

func areSimilar(mat [][]int, k int) bool {
	n := len(mat[0])
	k %= n
	if k == 0 {
		return true
	}
	for i, r := range mat {
		r0 := slices.Clone(r)
		if i%2 == 0 {
			r = append(r[k:], r[:k]...)
		} else {
			r = append(r[n-k:], r[:n-k]...)
		}
		if !slices.Equal(r0, r) {
			return false
		}
	}
	return true
}

上一题