LeetCode 2946.循环移位后的矩阵相似检查:模拟(左即是右)

【LetMeFly】2946.循环移位后的矩阵相似检查:模拟(左即是右)

力扣题目链接:https://leetcode.cn/problems/matrix-similarity-after-cyclic-shifts/

给你一个下标从 0 开始 且大小为 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

解题方法:模拟

如果一行左移 k k k次和原来相同,那么它右移 k k k次肯定也和原来相同。

所以我们不用管第几行,统一判断每个元素右移 k k k后是否等值就好了( r o w j = = r o w ( j + k ) m o d    l e n ( r o w ) rowj == row(j + k)\\mod len(row) rowj==row(j+k)modlen(row)

  • 时间复杂度 O ( s i z e ( m a t ) ) O(size(mat)) O(size(mat))
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
cpp 复制代码
/*
 * @LastEditTime: 2026-03-27 08:49:37
 */
class Solution {
public:
    bool areSimilar(vector<vector<int>>& mat, int k) {
        int m = mat[0].size();
        for (vector<int>& row : mat) {
            for (int j = 0; j < m; j++) {
                if (row[j] != row[(j + k) % m]) {
                    return false;
                }
            }
        }
        return true;
    }
};
Python
python 复制代码
'''
LastEditTime: 2026-03-27 08:58:55
'''
from typing import List

class Solution:
    def areSimilar(self, mat: List[List[int]], k: int) -> bool:
        m = len(mat[0])
        return all(row[j] == row[(j + k) % m] for j in range(m) for row in mat)
Java
java 复制代码
/*
 * @LastEditTime: 2026-03-27 08:57:58
 */
class Solution {
    public boolean areSimilar(int[][] mat, int k) {
        int m = mat[0].length;
        for (int[] row : mat) {
            for (int j = 0; j < m; j++) {
                if (row[j] != row[(j + k) % m]) {
                    return false;
                }
            }
        }
        return true;
    }
}
Go
go 复制代码
/*
 * @LastEditTime: 2026-03-27 08:53:34
 */
package main

func areSimilar(mat [][]int, k int) bool {
	m := len(mat[0])
    for _, row := range mat {
		for j := range row {
			if row[j] != row[(j + k) % m] {
				return false
			}
		}
	}
	return true
}
Rust
rust 复制代码
/*
 * @LastEditTime: 2026-03-27 09:08:38
 */
impl Solution {
    pub fn are_similar(mat: Vec<Vec<i32>>, k: i32) -> bool {
        let m = mat[0].len();
        for row in mat.iter() {
            for j in 0..row.len() {
                if (row[j] != row[(j + k as usize) % m]) {
                    return false;
                }
            }
        }
        true
    }
}

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

相关推荐
8Qi89 小时前
LeetCode 75:颜色分类(荷兰国旗问题)—— Java 题解 ✅
java·算法·leetcode·指针·排序
888CC++10 小时前
如何在 C 语言中进行程序调试?
前端·javascript·算法
(●—●)橘子……12 小时前
力扣第503场周赛练习理解
python·学习·算法·leetcode·职场和发展·周赛
明志数科13 小时前
4D时序标注技术详解:让机器人理解连续动作的数据基础
java·算法·机器人
KaMeidebaby14 小时前
卡梅德生物技术快报|原核表达系统工艺优化:包涵体重折叠 + 分子筛纯化实现功能 RBD 高效制备,附全参数配置
前端·人工智能·算法·数据挖掘·数据分析
无限码力14 小时前
携程0510笔试真题【单数组交换】
算法·携程笔试·携程笔试真题·携程0510笔试真题
BlockWay15 小时前
WEEX Labs 周度观察:微软-OpenAI 合作调整与AI 多云趋势
大数据·人工智能·算法·安全·microsoft
风筝在晴天搁浅15 小时前
快手 CodeTop LeetCode 224.基本计算器
数据结构·算法·leetcode
Smoothcloud润云15 小时前
5大功能精修,重构AI算力使用体验!
java·人工智能·windows·算法·重构·编辑器·sublime text