LeetCode 36、有效的数独

news/2024/8/22 10:29:55

36、有效的数独

1)题目描述

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

  1. 数字 1-9 在每一行只能出现一次。
  2. 数字 1-9 在每一列只能出现一次。
  3. 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)

注意:

  • 一个有效的数独(部分已被填充)不一定是可解的。
  • 只需要根据以上规则,验证已经填入的数字是否有效即可。
  • 空白格用 '.' 表示。

示例 1:

img

输入:board = 
[["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

示例 2:

输入:board = 
[["8","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"]]
输出:false
解释:除了第一行的第一个数字从 5 改为 8 以外,空格内其他数字均与 示例1 相同。 但由于位于左上角的 3x3 宫内有两个 8 存在, 因此这个数独是无效的。

提示:

  • board.length == 9
  • board[i].length == 9
  • board[i][j] 是一位数字(1-9)或者 '.'

2)分析

哈希表一次遍历。可以使用哈希表记录每一行、每一列和每一个小九宫格中,每个数字出现的次数。只需要遍历数独一次,在遍历的过程中更新哈希表中的计数,并判断是否满足有效的数独的条件即可。

对于给ij列的元素,其行位置为i,列位置为j,小方格位置i/3,j/3。设定三个数组分别r[9][9]、l[9][9]、box[3][3][9]记录行、列、小方格中1-9九个数字出现的次数。rl都是二位是数组,有九行,每一行九个元素,分别记录数独表中每一行里面1-9的出现次数和数独表中每一列里面1-9的出现次数,box是三维数组,前两维表示小方格在数独表中的坐标(三行三列),第三维记录每个小方格中1-9出现的次数。

遍历过程中,board[i][j]–>r[i][value]++,l[j][value]++,box[i/3][j/3][value]++,其中valueboard[i][j]对应的数字。同时判断自增之后的r[i][value]++,l[j][value]++,box[i/3][j/3][value]++若大于一,则返回false。若遍历结束都没有出现大于一,返回true

3)C++代码

class Solution {
public:
    bool isValidSudoku(vector<vector<char>>& board) {
        int r[9][9];
        int l[9][9];
        int box[3][3][9];

        memset(r,0,sizeof(r));
        memset(l,0,sizeof(l));
        memset(box,0,sizeof(box));

        for(int i=0;i<9;i++){
            for(int j=0;j<9;j++){
                char ch=board[i][j];
                if(ch!='.'){
                    int value=ch-'0'-1;
                    r[i][value]++;
                    l[j][value]++;
                    box[i/3][j/3][value]++;
                    if(r[i][value]>1||l[j][value]>1||box[i/3][j/3][value]>1)
                        return false;
                }
            }
        }
        return true;
    }
};

http://www.niftyadmin.cn/n/3573263.html

相关文章

php基础控制器类_基础控制器 · ThinkPHP6.0完全开发手册 · 看云

大多数情况下&#xff0c;我们建议给你的控制器继承一个基础控制器。默认安装后&#xff0c;系统提供了一个app\BaseController基础控制器类&#xff0c;你可以对该基础控制器进行修改。>[danger] 基础控制器的位置可以随意放置&#xff0c;只需要注意更改命名空间即可。该基…

java swt 输入框_关于java swt的问题 点击按钮,弹出一个带Text的对话框,输入一个字符串,然后关闭对话框,同时保存字符串...

因为之后要对保存的字符串做一些操作&#xff0c;要暂时停止后面代码的执行&#xff0c;但是不知道该怎么停止。。。button1.addSelectionListener(neworg.eclipse.swt.events.SelectionAdapter(){publicvo...因为之后要对保存的字符串做一些操作&#xff0c;要暂时停止后面代码…

北京邮电大学计算机考研拟录取名单,北京邮电大学研究生拟录取名单2021公示...

关于公布2021年统考硕士研究生拟录取名单的通知根据教育部、北京市相关文件要求&#xff0c;经我校研究生招生委员会审核&#xff0c;现将我校2021年统考硕士研究生拟录取名单予以公示&#xff0c;公示期为10天(4月24日-5月3日)。公示期内如有异议&#xff0c;请与研究生招生办…

jquery 获取input的值

为什么80%的码农都做不了架构师&#xff1f;>>> //jquery获取input值 <a href"javascript:history.back(-1);">返回</a> <input class"btn btn6" onclick"history.go(-1)" value"返回" type"button&q…

java tidy 忽略属性_Tidy 使用 转的

tidytidy名称tidy- 一个验证,纠正,美化HTML文件的工具(version: 18 June 2008)用法tidy [option ...] [file ...] [option ...] [file ...]简述Tidy 可以处理 HTML, XHTML 和 XML 文件,并生成清理过HTML标签的文件. 也用于HTML 验证, 检测文件并对常见的代码错误进行纠正, 力…

LeetCode 73、矩阵置零

73、矩阵置零 1&#xff09;题目分析 给定一个 *m* x *n* 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]]示例…

php关闭按钮,javascript – 在div中添加关闭按钮关闭框

最简单的方式(假设你想删除元素)x添加到你的div&#xff0c;一个example here。你也可以使用这样的东西window.onload function(){document.getElementById(close).onclick function(){this.parentNode.parentNode.parentNode.removeChild(this.parentNode.parentNode);retur…

计算机考研试卷结构,历年计算机考研试卷结构与难度分析

原标题&#xff1a;历年计算机考研试卷结构与难度分析1.历年计算机统考的试卷结构分析计算机考研专业课在2009年实行了第一次统考&#xff0c;统考科目包括四门计算机专业课&#xff1a;数据结构、计算机组成原理、操作系统和计算机网络&#xff0c;这四门课程合在一起称为计算…