有效的数独

2023-11-09

LeetCode 之 有效的数独

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

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

在这里插入图片描述

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

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

输入:
[
[“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

说明

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

解题思路

思路可以使用 几个数组来 遍历剔除 相应的规则,
以及一个用来检查 数独数据的函数。
可以把 char 转换成 int,再来设置。
再计算出它合适的 清除时机,

     	/// <summary>
        /// 对 数独的数据进行判断筛选。
        /// 把字符转换为索引并 存储。
        /// </summary>
        /// <param name="borad">数独数据</param>
        /// <param name="nums">目标数组,行,列等</param>
        /// <param name="y">坐标 y</param>
        /// <param name="x">坐标 x</param>
        /// <returns></returns>
       private bool CheckBoard(char[][] borad,int[] nums, int y, int x)
        {    
            //1的 字符码是 49
            int index = (int)(borad[y][x]) - 49;
            if (nums[index] == 1)
            {
                return false;
            }

            nums[index] = 1;
            return true;
        }
          public bool IsValidSudoku(char[][] board)
        {

            //思路 使用个 数组来 处理 所对应的规则,
            //并计算出它 合适的初始化时间。也就是 读取新的新的数独数据,
            //将 字符转换为  索引从0开始,进行设置 flag,如果存在就说明已经存储过了。
            
            int[] rowNums = new int[9];
            int[] columnNums = new int[9];
            int[][] grid = new int[][]  //3个不同的格子
            {
                new int[9],
                new int[9],
                new int[9],
            };
            //  y,x 代表 行,
            //x,y 代表 列
            for (int y = 0; y < 9; y++)
            {
                for (int x = 0; x < 9; x++)
                {

                    int index = x / 3;

                    if (board[y][x]!='.')
                    {
                        //检查行
                        if (!CheckBoard(board, rowNums, y, x))
                        {
                            return false;
                        }

                        //检查格子,这里 遍历是从左到右,0 ~9 分别对应 3个不同格子的第一列,第二列,以及第三列				
                        //一次遍历会 分别检查 这不同的三列。
                        if (!CheckBoard(board,grid[index],y,x))
                        {
                            return false;
                        }

                    }
                    

                    if (board[x][y]!='.')
                    {   //检查列
                        if (!CheckBoard(board, columnNums, x, y))
                        {
                            return false;
                        }
                    }
                    // 格子重新初始化的时机。
                    if ((x+1)%3==0&& (y+1)%3 ==0)
                    {
                        grid[index] = new int[9];
                    }
                }
                rowNums = new int[9];
                columnNums = new int[9];
            }

            return true;
        }

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有效的数独 的相关文章

随机推荐

  • thinkphp6 入门教程合集(更新中)

    thinkphp6 入门 1 安装 路由规则 多应用模式 thinkphp6 入门 1 安装 路由规则 多应用模式 软件工程小施同学的博客 CSDN博客 thinkphp6 入门 2 视图 渲染html页面 赋值 thinkphp6 入门
  • 组件是如何通信的?技术水平真的很重要!学习路线+知识点梳理

    开头 此文希望能给想跳槽和面试朋友一些参考 金九银十已过 面试的狂热季也已结束 小编也正是选择了在金九十银跳槽 之前在腾讯做了五年Android开发工作 之后感觉公司不一定能继续提供给我想要的发展空间与前景 说白了 有家室 我需要更高的薪酬
  • pandas提取时间里面的年月日_python入门

    时间模块 datetime 1 datetime date date对象 年月日 datetime date today 该对象类型为datetime date 可以通过str函数转化为str In 1 import datetime In
  • 砝码称重问题【dp】

    设有 1g 2g 3g 5g 10g 20g 的砝码各若干枚 其 总重 1000g 要 求 输入 a1 a2 a3 a4 a5 a6 表示 1g 砝码有 a1 个 2g 砝码有 a2 个 20g 砝码有 a6 个 输出 Total N N
  • 【MySQ必知必会】MySQL 是怎么存储数据的?

    文章目录 总结 前言 一 创建数据库 二 确认字段 三 创建数据表 四 插入数据 总结 CREATE DATABASE demo DROP DATABASE demo 删除数据库 SHOW DATABASES 查看数据库 创建数据表 CRE
  • Nginx——Location用法详解

    目录 一 Nginx的Httpp配置简介 二 Location匹配规则 1 精确匹配 2 最佳匹配 3 正则表达式要区分大小写 4 正则表达式不区分大小写 5 开头 通用匹配 6 综合示例 7 root alias指令区别 一 Nginx的
  • Python爬虫入门案例6:scrapy的基本语法+使用scrapy进行网站数据爬取

    几天前在本地终端使用pip下载scrapy遇到了很多麻烦 总是报错 花了很长时间都没有解决 最后发现pycharm里面自带终端 狂喜 于是直接在pycharm终端里面写scrapy了 这样的好处就是每次不用切换路径了 pycharm会直接把
  • 网络层协议------IP协议

    这里写目录标题 IP协议 基本概念 协议头格式 网段划分 特殊的ip地址 私网ip地址和公网ip地址 ip地址的数量限制 路由 IP协议 IP协议 其实就是TCP IP协议中对于网络层的一个协议 注意IP协议是TCP IP协议族中最为核心的
  • 查看localstorage容量

    1 function if window localStorage console log 浏览器不支持localStorage var size 0 for let item in window localStorage if windo
  • 电路实验---全桥整流电路

    全桥整流电路作用 采用四个二极管将交流电转换成直流电 全桥整流电路图 全桥整流电路原理 220V交流电经过变压器T1降压输出电压U2 当U1正半周从L1经过T1 到达L2 极性表现为上正下负 此时电流流过方向 L2上正 gt VD1 gt
  • uniapp的onPullDownRefresh失效 不执行

    需要在 pages json 里 找到的当前页面的pages节点 并在 style 选项中开启 enablePullDownRefresh path pages install uploadImg style navigationBarTi
  • 数据分析-数据集划分-交叉验证

    目录 交叉验证 k折交叉验证 k fold cross validation 分层k折交叉验证 stratified cross validation Sklearn的实现 k折交叉分类器 分层k折交叉分类器 打乱数据集后再划分 模型验证
  • angular 代理http到https

    api target https www XXXX com changeOrigin true public target https www XXXX com changeOrigin true
  • uniapp switch按钮的使用

    switch使用官方文档 https uniapp dcloud io component switch 想要改变switch按钮的大小
  • Cloudera CDH 5.1版本的Hive与LDAP-2.4.44集成

    文章目录 0 没集成之前测试 1 安装LDAP 2 4 44 2 增加组织 3 添加用户 4 CDH配置LDAP 5 beeline测试1 5 beeline测试2 0 没集成之前测试 可以看到没有输入用户密码可以登录 1 安装LDAP 2
  • OpenGL学习笔记(十)-几何着色器-实例化

    参考网址 LearnOpenGL 中文版 4 7 几何着色器 4 7 1 基本概念 1 顶点和片段着色器之间有一个可选的几何着色器 几何着色器的输入是一个图元 如点或三角形 的一组顶点 顶点发送到下一着色器之前可对它们随意变换 将顶点变换为
  • 【Web Crawler】Python 的 urllib.request 用于 HTTP 请求

    如果您需要使用 Python 发出 HTTP 请求 那么您可能会发现自己被引导至 brilliantrequests库 尽管它是一个很棒的库 但您可能已经注意到它并不是 Python 的内置部分 如果您出于某种原因更喜欢限制依赖项并坚持使用
  • qt 中lineEdit->setText()输出double

    在qt中需要将获取到的double 值在ui界面上显示出来 便于观察 但是lineEdit控件的setText 要求的参数是string 所以我们先要进行转化 将double 转化为string QString QString number
  • 计算方法实验(二):龙贝格积分法

    Romberg积分法数学原理 利用复化梯形求积公式 复化辛普生求积公式 复化柯特斯求积公式的误差估计式计算积分 a b f x
  • 有效的数独

    LeetCode 之 有效的数独 判断一个 9x9 的数独是否有效 只需要根据以下规则 验证已经填入的数字是否有效即可 数字 1 9 在每一行只能出现一次 数字 1 9 在每一列只能出现一次 数字 1 9 在每一个以粗实线分隔的 3x3 宫