首页 > 其他分享 >【leetcode-数组】有效的数独

【leetcode-数组】有效的数独

时间:2023-03-23 21:06:42浏览次数:40  
标签:数字 示例 boolean board 数组 new leetcode 数独


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

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

【leetcode-数组】有效的数独_i++

上图是一个部分填充的有效的数独。

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

示例 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

示例 2:


输入:
[
  ["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 存在, 因此这个数独是无效的。

说明:

  • 一个有效的数独(部分已被填充)不一定是可解的。
  • 只需要根据以上规则,验证已经填入的数字是否有效即可。
  • 给定数独序列只包含数字 1-9 和字符 '.' 。
  • 给定数独永远是 9x9 形式的。

思路:用三个二维数组rawFlagcolFlag以及cellFlag,分别记录行位置的数据是否重复;列位置的数据是否有重复;3*3宫内是否有重复;

class Solution {
    public boolean isValidSudoku(char[][] board) {
        boolean[][] rowFlag = new boolean[9][9];
        boolean[][] colFlag = new boolean[9][9];
        boolean[][] cellFlag = new boolean[9][9];
        
        int m = board.length;
        int n = board[0].length;
        for(int i=0;i<m;i++) {
            for(int j=0;j<n;j++) {
                char cc = board[i][j];
                if(cc>='1'&&cc<='9') {
                    int c = cc-'1';
                    if(rowFlag[i][c] || colFlag[j][c] || cellFlag[3*(i/3)+j/3][c]) {
                        return false;
                    }
                    
                    rowFlag[i][c]=true;
                    colFlag[j][c] =true;
                    cellFlag[3*(i/3)+j/3][c]=true;
                }
            }
        }
        
        return true;

    }
}

 

标签:数字,示例,boolean,board,数组,new,leetcode,数独
From: https://blog.51cto.com/u_6813689/6145936

相关文章

  • 【leetcode】位1的个数
    编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为‘1’ 的个数(也被称为汉明重量)。 示例1:输入:00000000000000000000000000001011输出:3解释:输入的二进......
  • 【leetcode】颠倒二进制位
    颠倒给定的32位无符号整数的二进制位。 示例1:输入:00000010100101000001111010011100输出:00111001011110000010100101000000解释:输入的二进制串00000010100101......
  • day23 打卡669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转
    day23打卡669.修剪二叉搜索树108.将有序数组转换为二叉搜索树538.把二叉搜索树转换为累加树669.修剪二叉搜索树669题目链接1.迭代法classSolution{public......
  • LeetCode剑指 Offer 05. 替换空格
    题目描述:请实现一个函数,把字符串s中的每个空格替换成"%20"。 示例1:输入:s="Wearehappy."输出:"We%20are%20happy." 限制:0<=s的长度<=10000  //使......
  • react函数组件中,父组件调用子组件的方法
    使用ref来处理。父组件里面   子组件里面   ......
  • #yyds干货盘点# LeetCode面试题:插入区间
    1.简述:给你一个无重叠的,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。 示例 1:输入:i......
  • 用lambda表达式写一个数组映射
    #include<iostream>#include<vector>#include<algorithm>usingnamespacestd;intmain(){ //定义一个整数数组arr,包含五个元素:1,2,3,4,5。 intarr[]={......
  • 代码随想录Day7-Leetcode454. 四数相加 II,383. 赎金信 ,15. 三数之和 ,18. 四数之和
    454.四数相加II这个第一时间没想出来怎么做的;后面看了题解才发现可以两两分组;绝了/***@param{number[]}nums1*@param{number[]}nums2*@param{number[......
  • 可持久化数组
    可持久化数组可以写一棵可持久化线段树,不过受到宇宙射线的影响,写了个奇奇怪怪的东西因为是单点修改、单点查询,线段树只有叶子结点有用中间结点没什么用还浪费空间,所以就......
  • [LeetCode] Power of Two
    判断2的次方数这道题让我们判断一个数是否为2的次方数,而且要求时间和空间复杂度都为常数我们来观察下2的次方数的二进制写法的特点:1    2      4   ......