class Solution {
public:
bool areSimilar(vector<vector<int>>& mat, int k) {
}
};
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 。
提示:
1 <= mat.length <= 25
1 <= mat[i].length <= 25
1 <= mat[i][j] <= 25
1 <= k <= 50
原站题解
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 }