【教3妹学编程-算法题】循环移位后的矩阵相似检查

发布时间:2023年12月20日

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
坚持不懈,越努力越幸运,大家一起学习鸭~~~

阳光明媚

3妹:“太阳当空照,花儿对我笑,小鸟说早早早,你为什么背上炸药包”
2哥 :3妹,什么事呀这么开发。
3妹:2哥你看今天的天气多好啊,阳光明媚、万里无云、秋高气爽,适合秋游。
2哥:是啊,立冬之后天气多以多云为主,好不容易艳阳高照。可是你不能秋游,赶紧收拾收拾上班去啦
3妹:哼, 好吧~
2哥:给你出了一道题发你微信里了, 上班通勤的路上记得看一下,回来问你答案~
image.png
3妹:知道啦,难不倒我!

题目:

给你一个下标从 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
解释:
image.png
初始矩阵如图一所示。
图二表示对奇数行右移一次且对偶数行左移一次后的矩阵状态。
图三是经过两次循环移位后的最终矩阵状态,与初始矩阵相同。
因此,返回 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

思路:

思考

由于循环左移 n 次等价于循环左移 0 次,左移 n+1 次等价于循环左移 1 次,……,所以可以先把 k 模上 m。

如果此时 k=0,那么操作不会影响矩阵,直接返回 true。

否则模拟就行。

如果左移 k 次可以让数组相等,那么右移 k 次也可以让数组相等(证明见视频),所以怎么写都是对的,可以全部改成左移 kkk 次或者右移 k 次。

java代码:

class Solution {
    public boolean areSimilar(int[][] mat, int k) {
        int n = mat[0].length;
        k %= n;
        if (k == 0) {
            return true;
        }
        for (int[] r : mat) {
            for (int j = 0; j < n; j++) {
                if (r[j] != r[(j + k) % n]) {
                    return false;
                }
            }
        }
        return true;
    }
}
文章来源:https://blog.csdn.net/kangbin825/article/details/135118947
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。