每日一道leetcode(2026.03.27):循环移位后的矩阵相似检查
- [1. 题目](#1. 题目)
- [2. 分析](#2. 分析)
- [3. 代码实现](#3. 代码实现)
1. 题目
给你一个下标从 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. 分析
今天的题是简单难度,思路可以将每行移动后的元素放到一个新的一维数组,再比较两个数组是否相等,唯一需要注意的是k可以对列数取余,因为移动n次后就回到原来的位置了嘛,取余可以减少运算量。
3. 代码实现
java
class Solution {
public boolean areSimilar(int[][] mat, int k) {
int col = mat[0].length;
if (col == 1) {
// 只有一列时
return true;
}
// 对k求余
int moveK = k % col;
if (moveK == 0) {
return true;
}
boolean isEven = true;
for (int[] ints : mat) {
isEven = !isEven;
// 逐行判断
for (int j = 0; j < col; j++) {
// 奇数行右移,偶数行左移
// 计算当前元素在新数组中的索引位置
int index;
if (isEven) {
index = j - moveK;
if (index < 0) {
index = col + index;
}
} else {
index = j + moveK;
if (index > col - 1) {
index = index % col;
}
}
if (ints[index]!=ints[j]){
return false;
}
}
}
return true;
}
}
