Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >有效的数独(leetcode36)

有效的数独(leetcode36)

作者头像
Vincent-yuan
发布于 2021-04-09 07:14:24
发布于 2021-04-09 07:14:24
39800
代码可运行
举报
文章被收录于专栏:Vincent-yuanVincent-yuan
运行总次数:0
代码可运行

判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。

数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。

数独部分空格内已填入了数字,空白格用 '.' 表示。

示例 1:

输入: [ ["5","3",".",".","7",".",".",".","."], ["6",".",".","1","9","5",".",".","."], [".","9","8",".",".",".",".","6","."], ["8",".",".",".","6",".",".",".","3"], ["4",".",".","8",".","3",".",".","1"], ["7",".",".",".","2",".",".",".","6"], [".","6",".",".",".",".","2","8","."], [".",".",".","4","1","9",".",".","5"], [".",".",".",".","8",".",".","7","9"] ] 输出: true

解析:

最简单的思路,是遍历9x9的数独三次,确保:

  • 行中没有重复的数字
  • 列中没有重复的数字
  • 3x3 子数独没有重复数字

但是,实际上,它们都可以放到一次迭代。

我们只需要记录对应的三种情况中数字出现的次数,如果次数大于1,说明数独无效,返回false。

即:遍历数独,检查每个单元格中的值是否已经在当前的 行 / 列 / 子数独 中出现过。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Leetcode36 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        char[][] board = new char[9][9];
        board[0]=new char[]{'5','3','.','.','7','.','.','.','.'};
        board[1]=new char[]{'6','.','.','1','9','5','.','.','.'};
        board[2]=new char[]{'.','9','8','.','.','.','.','6','.'};
        board[3]=new char[]{'8','.','.','.','6','.','.','.','3'};
        board[4]=new char[]{'4','.','.','8','.','3','.','.','1'};
        board[5]=new char[]{'7','.','.','.','2','.','.','.','6'};
        board[6]=new char[]{'.','6','.','.','.','.','2','8','.'};
        board[7]=new char[]{'.','.','.','4','1','9','.','.','5'};
        board[8]=new char[]{'.','.','.','.','8','.','.','7','9'};
        
        boolean result = isValidSudoku(board);
        System.out.println(result);
    }

    public static boolean isValidSudoku(char[][] board) {
        //初始化数据
        HashMap<Integer,Integer>[] rows = new HashMap[9];
        HashMap<Integer,Integer>[] columns = new HashMap[9];
        HashMap<Integer,Integer>[] boxs = new HashMap[9];
        
        for(int i=0;i<9;i++){
            rows[i] = new HashMap<Integer,Integer>();
            columns[i] = new HashMap<Integer,Integer>();
            boxs[i] = new HashMap<Integer,Integer>();
        }
        
        //验证是否有效
        for(int i=0;i<9;i++){
            for(int j=0;j<9;j++){
                char num = board[i][j];
                if(num!='.'){
                    int n = (int)num;//当前单元格的值
                    int box_index = (i/3)*3 + j/3;
                    
                    //记录当前单元格的值在行/列/子数独中出现的次数
                    rows[i].put(n, rows[i].getOrDefault(n, 0)+1);
                    columns[j].put(n, columns[j].getOrDefault(n, 0)+1);
                    boxs[box_index].put(n, boxs[box_index].getOrDefault(n, 0)+1);
                    
                    //检查是否有值之前已经出现过
                    if(rows[i].get(n)>1||columns[j].get(n)>1||boxs[box_index].get(n)>1){
                        return false;
                    }
                }
            }
        }
        
        return true;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​LeetCode刷题实战36: 有效的数独
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/01/20
3760
​LeetCode刷题实战36: 有效的数独
【每日一题】36. Valid Sudoku
Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:
公众号-不为谁写的歌
2020/08/12
2800
【每日一题】36. Valid Sudoku
LeetCode题目36:有效的数独
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
二环宇少
2020/08/13
5080
LeetCode题目36:有效的数独
如何用程序判断一个数独是否有效
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
MickyInvQ
2021/03/02
7050
如何用程序判断一个数独是否有效
LeetCode 图解 | 36.有效的数独
今天分享一个LeetCode题,题号是36,标题是:有效的数独,题目标签是散列表,散列表也称哈希表。此题解题思路用到了少量的空间换取时间的方法,降低时间上的消耗。
五分钟学算法
2020/02/20
7090
LeetCode 图解 | 36.有效的数独
Leetcode No.36 有效的数独
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
week
2022/01/07
3460
Leetcode No.36 有效的数独
【刷穿 LeetCode】36. 有效的数独(中等)
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
宫水三叶的刷题日记
2021/02/20
5500
数据结构003:有效的数独
根据题目的规则,数独需要满足三个规则,针对规则一和二可知,我们在遍历每个元素的时候,需要判断该元素所在行和列中是否出现过,即可判断该元素是否满足规则一和二,因此我们可以针对每一行、每一列出现元素的次数作为校验标准,例如声明两个二维数组row[9][9] 和col[9][9] 分别代表行和列上面0-9 出现的次数。例如row[1][2] 表示第1行中,出现2的次数,col[4][3] 表示第4列出现3的次数(都是从第0行/列开始算的)。对于数独数组第i 行j 列上的数值n=board[i][j] ,首先将row[i][n] 上对应的值加一,再将col[j][n] 也加一,然后判断row[i][n] 和row[i][n] 的值是否大于1,大于1则表明i 行或者j 列数字n 出现的次数大于1,即不唯一。不满足规则一或者二。
艰默
2022/12/11
8040
数据结构003:有效的数独
☆打卡算法☆LeetCode 36、有效的数独 算法解析
链接:36. 有效的数独 - 力扣(LeetCode) (leetcode-cn.com)
恬静的小魔龙
2022/08/07
3820
☆打卡算法☆LeetCode 36、有效的数独  算法解析
LC36— 有效的数独
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
Java架构师必看
2021/05/14
3410
LeetCode 36. 有效的数独(哈希)
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
Michael阿明
2021/02/20
2670
LeetCode 36. 有效的数独(哈希)
LeetCode 36. 有效的数独
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
freesan44
2020/06/03
3670
36. 有效的数独--题解
请你判断一个 9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。
付威
2021/04/25
3930
36. 有效的数独--题解
leetcode-36-有效的数独
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
chenjx85
2018/08/16
4360
leetcode-36-有效的数独
数据结构003:有效的数独
请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。
艰默
2022/12/12
4320
数据结构003:有效的数独
漫画:算法如何验证合法数独 | 全世界最难的数独?
今天是小浩算法 “365刷题计划” 第95天 。数独相信在座的各位都玩过,那我们如何使用程序去验证一个 9×9 的数独是有效的呢?一起看下!
程序员小浩
2020/05/26
8480
漫画:算法如何验证合法数独 | 全世界最难的数独?
【leetbook刷题】有效的数独
请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。
薄荷冰
2024/01/22
1760
【leetbook刷题】有效的数独
36. 有效的数独
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
张伦聪zhangluncong
2022/10/26
4770
2021-09-22:请你判断一个 9x9 的数独是否有效。只需要 根
2021-09-22:请你判断一个 9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)数独部分空格内已填入了数字,空白格用 '.' 表示。注意:一个有效的数独(部分已被填充)不一定是可解的。只需要根据以上规则,验证已经填入的数字是否有效即可。
福大大架构师每日一题
2021/09/22
6450
leecode刷题(9)-- 有效的数独
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
希希里之海
2019/01/07
6060
相关推荐
​LeetCode刷题实战36: 有效的数独
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验