当前位置:首页 » 《随便一记》 » 正文

✨【Code皮皮虾】多方法,全面注释解析,解决——>《36. 有效的数独》_Code皮皮虾的博客

27 人参与  2021年12月30日 13:08  分类 : 《随便一记》  评论

点击全文阅读


文章目录

    • 😉毛遂自荐
    • 🌈题目
    • 🔥思路讲解
    • 🌊三维数组
    • ⛄采用二维实现
      • 😁思路讲解
      • 😋代码实现
    • 💖最后

Code皮皮虾 一个沙雕而又有趣的憨憨少年,和大多数小伙伴们一样喜欢听歌、游戏,当然除此之外还有写作的兴趣,emm…,日子还很长,让我们一起加油努力叭🌈

👉话不多说,直达底部有粉丝专享福利!!!


😉毛遂自荐

毛遂自荐一下,给大家推荐一下自己的专栏😁,欢迎小伙伴们收藏关注😊

大厂面试题专栏

Java专栏

爬虫专栏

更多专栏尽在主页,点我😁!!!

🌈题目

👉力扣链接

image.png

注意

image.png



🔥思路讲解

因为题目给出的范围

board.length == 9
board[i].length == 9
board[i][j] 是一位数字或者 ‘.’

所以,以示例一为例,整个数组分为9个小数组每个小数组中不能出现重复数字可采用 / 3的方式确定在哪个小数组

image.png

所以,我们可以采用三维数组的方式来实现



🌊三维数组

class Solution {
    public boolean isValidSudoku(char[][] board) {
        
        //因为数字 1-9 在每一行只能出现一次。
        int[][] rows = new int[9][9];

        //因为数字 1-9 在每一列只能出现一次。
        int[][] cols = new int[9][9];

        //三维,数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
        int[][][] tmps = new int[3][3][9];
        

        //一次遍历
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                char c = board[i][j];

                //如果当前字符不是 . 才进行判断
                if (c != '.') {
                    //将字符转化为int类型的索引
                    int index = c - '0' - 1;
                    //当前行,这个索引,即这个数字已经出现一次
                    rows[i][index]++;

                    //当前列,这个索引,即这个数字已经出现一次
                    cols[j][index]++;

                    //当前这个小数组,这个索引,即这个数字已经出现一次,通过 / 3来确定在哪个小数组
                    tmps[i / 3][j / 3][index]++;
                    
                    //条件判断,如果 > 1,说明重复,则return false;
                    if (rows[i][index] > 1 || cols[j][index] > 1 || tmps[i / 3][j / 3][index] > 1) {
                        return false;
                    }
                }
            }
        }
        return true;
    }
}



⛄采用二维实现



😁思路讲解

想要从三维降到二维,就需要通过巧妙的方法来确定在哪个小数组,这是关键!!!


如何确定?

公式先告诉大家:(i / 3) * 3 + j / 3,通过这个公式就可以确定,不信我们来验证验证🔥

以示例一为例

  1. 比如说:第三个小数组中的6,它的坐标为(2,7),通过公式得出(2 / 3) * 3 + 7 / 3 = 2,也就是下标为2的小数组也就是第三个数组
  2. 再来,第七个小数组中的6,它的坐标为(6,1),通过公式得出(6 / 3) * 3 + 1 / 3 = 6,下标为6,也就是第七个小数组

image.png

😋代码实现

class Solution {
    public boolean isValidSudoku(char[][] board) {


        int[][] rows = new int[10][10];
        int[][] cols = new int[10][10];
        //三维降二维
        int[][] tmps = new int[10][10];

        char ch = ' ';
        int tmp = 0;


        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                ch = board[i][j];
                if (ch == '.') continue;
                tmp = ch - '0';

                //套公式计算在哪个小数组
                int idx = i / 3 * 3 + j / 3;
                rows[i][tmp] += 1;
                cols[j][tmp] += 1;
                tmps[idx][tmp] += 1;

                if (rows[i][tmp] > 1 || cols[j][tmp] > 1 || tmps[idx][tmp] > 1) return false;             
            }
        }
        return true;
    }
}

当然,也可以通过boolean数组来判断


💖最后

我是 Code皮皮虾,一个热爱分享知识的 皮皮虾爱好者,未来的日子里会不断更新出对大家有益的博文,期待大家的关注!!!

创作不易,如果这篇博文对各位有帮助,希望各位小伙伴可以一键三连哦!,感谢支持,我们下次再见~~~

公众号干货内容输出,囊括Java、Python爬虫、力扣题解、大厂面试题 四大系列,更有长时间总结的干货资源分享,后台回复:面试资料即可领取


最后,祝各位步步高升🚀🚀🚀

                                                   粉丝福利👇🏻👇🏻👇🏻


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/32406.html

数组  数字  公式  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 绫仙箩谢扶晏小说(绫仙箩谢扶晏)(穿书恶女攻略清冷剑修后死遁了)完整章节列表_笔趣阁
  • 爱如昨日死精彩分享_江雨眠顾司顾哥无错版_小说后续在线阅读_无删减免费完结_
  • 重生七零,短命路人甲我来爱李静苏陆怀民:+后续热血十足+延伸+完本(重生七零,短命路人甲我来爱)畅享在线阅读
  • 没苦硬吃!放纵后我获天赋神通!小说完结篇(王建强)(没苦硬吃!放纵后我获天赋神通!)全书无套路阅读无广告小说大结局
  • 谢淮川苏婉婉(我终于决定放过他了)全文免费阅读无弹窗_(谢淮川苏婉婉全文免费阅读无弹窗)谢淮川苏婉婉最新章节列表
  • 贵妃每天只想当咸鱼小说(萧兮兮洛清寒)(贵妃每天只想当咸鱼)整本+后续+结局在线阅读
  • 云纾君迟玉:+后续+番外半溪明月枕清风无删减小说在线无广告高口碑小说
  • 新章速递既负如来又负卿是什么小说(莫司淮唐乐薇)完本阅读无广告(莫司淮唐乐薇)
  • 林齐(林齐)火爆小说全集免费阅读_反转传奇林齐:结局+番外无弹窗最新章节笔趣阁(林齐)
  • 萧兮兮洛清寒小说(贵妃每天只想当咸鱼)起点章节+全篇阅读热门作品预订
  • 穿成塌房顶流,我靠爆料翻红(陈昭陈莹静)_穿成塌房顶流,我靠爆料翻红
  • (番外)+(全文)谢青霄林相宜(八零奉子成婚,死对头成了妻管严:全文+结局+番外)全文免费阅读无弹窗大结局_(谢青霄林相宜)最新章节列表_笔趣阁(八零奉子成婚,死对头成了妻管严:全文+结局+番外)

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1