有效的数独[中等]

在这里插入图片描述

优质博文:IT-BLOG-CN

一、题目

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

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

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

示例 1:
输入: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)或者 ‘.’

二、代码

思路:

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

对于数独的第i行第j列的单元格,其中0≤i,j<9该单元格所在的行下标和列下标分别为ij,该单元格所在的小九宫格的行数和列数分别为⌊i/3​⌋⌊j/3⌋,其中0≤⌊i/3⌋,⌊j/3⌋<3

由于数独中的数字范围是19,因此可以使用数组代替哈希表进行计数。

具体做法是,创建二维数组rowscolumns分别记录数独的每一行和每一列中的每个数字的出现次数,创建三维数组subboxes记录数独的每一个小九宫格中的每个数字的出现次数,其中rows[i][index]columns[j]subboxes[⌊i/3⌋][⌊j/3⌋][index]分别表示数独的第i行第j列的单元格所在的行、列和小九宫格中,数字index+1出现的次数,其中0≤index<9对应的数字index+1满足1≤index+1≤9

如果board[i][j]填入了数字n则将rows[i][n−1]columns[j][n−1]subboxes[⌊i/3⌋][⌊j/3⌋][n−1]各加1。如果更新后的计数大于1,则不符合有效的数独的条件,返回false

如果遍历结束之后没有出现计数大于1的情况,则符合有效的数独的条件,返回true

class Solution {public boolean isValidSudoku(char[][] board) {// X轴数字出现的次数int[][] rows = new int[9][9];// y轴数字出现的次数int[][] columns = new int[9][9];// 九宫格内出现的次数int[][][] subboxes = new int[3][3][9];// 遍历 9*9 表格for (int i = 0; i < 9; i++ ) {for (int j = 0; j < 9; j++) {char element = board[i][j];if (element != '.') {int index = element - '1';// x轴中的元素+1rows[i][index]++;// y轴中的元素+1columns[j][index]++;// 九宫格中的元素+1subboxes[i/3][j/3][index]++;//次数大于1直接退出if (rows[i][index] > 1 || columns[j][index] > 1 || subboxes[i/3][j/3][index] > 1) return false;}}}return true;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/423073.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArrayList(集合)

一、ArrayList构造器 1.ArrayList()&#xff1a;构造一个初始容量为10的空列表 2.ArrayList(int n)&#xff1a;构造一个初始容量为n的空列表 3.ArrayList(Collection<? extends E> c)&#xff1a;按照集合的迭代器返回的顺序构造一个包含指定集合元素的列表 二、基本…

Docker-Jenkins编译android-app的两种方案

Docker-Jenkins编译android-app的两种方案 android开发使用jenkins编译&#xff0c;自动集成修改点/自动命名/自动备份&#xff0c;将修改的apk发布到测试服务器发布网盘&#xff0c;而不需要用通讯工具传来传去。 jenkins用在互联网开发编译比较常见&#xff0c;如果android开…

Ubuntu搭建Git Lab服务器

Ubuntu 搭建GitLab 情景资源虚拟机配置安装Dockers安装docker配置用户组&#xff08;可选&#xff09;运行docker设置开机自启&#xff08;可选&#xff09;重启docker验证Dockers安装是否成功&#xff08;可选&#xff09;查看版本(可选)查看镜像 Dockers安装Git Labdocker pu…

LaTex+VSCode开发中中文目录的解决方法

最近改用LaTexVSCode完成书稿的写作&#xff0c;感觉比TexStudio好用一些。安装完LaTex Workshop后&#xff0c;发现如果书稿的目录包含中文&#xff0c;则无法直接识别&#xff0c;编译的时候都是乱码。 在网上搜了一下&#xff0c;最后终于解决了&#xff0c;记录一下过程&am…

Java 设计者模式以及与Spring关系(四) 代理模式

目录 简介: 23设计者模式以及重点模式 代理模式&#xff08;Proxy Pattern&#xff09; 静态代理示例 spring中应用 动态代理 1.基于JDK的动态代理 target.getClass().getInterfaces()作用 内名内部类写法(更简洁&#xff0c;但不推荐) 2.基于CGLIB实现 spring中应用 …

超融合基础架构理解

1 超融合基础架构 1.1 定义 超融合基础架构&#xff08;Hyper-converged infrastructure&#xff0c;缩写为HCI&#xff09;&#xff0c;是一种集成了存储设备及虚拟运算的信息基础架构框架。在这样的架构环境中&#xff0c;同一厂商的服务器与存储等硬件单元&#xff0c;搭配…

云风网(www.niech.cn)个人网站搭建(二)服务器域名配置

这里直接采用宝塔服务器运维管理面板来进行配置&#xff0c;简单无脑 宝塔 Linux面板8.0.5安装脚本 //Centos安装脚本 yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec //Ubuntu/Deepi…

x-cmd pkg | hurl - HTTP 请求处理工具

目录 简介首次用户功能特点竞品和相关作品进一步探索 简介 Hurl 是 HTTP 请求处理工具&#xff0c;支持使用简单的纯文本格式定义的 HTTP 请求。它的用途非常广泛&#xff0c;既可以用于获取数据&#xff0c;也可以用于测试HTTP会话。 它可以链式处理请求&#xff0c;捕获数值…

[亲测有效]CentOS7下安装mysql5.7

前言 近期项目需要搭配mysql一起存储相关数据&#xff0c;但对mysql的版本有要求&#xff0c;于是在服务器搭建了mysql5.7&#xff0c;顺便记录一下搭建步骤和踩坑解决步骤。 目录 前言 一、清除旧安装包 二、安装YUM 三、使用yum命令即可完成安装 四、重新设置密码 五、…

阿里巴巴开源联邦学习框架FederatedScope

5月5日&#xff0c;阿里巴巴达摩院发布新型联邦学习框架FederatedScope&#xff0c;声称可以在不共享训练数据的情况下开发机器学习算法&#xff0c;从而保护隐私。&#xff0c;其源代码现已在Apache 2.0许可下发布在GitHub上。 介绍 该平台被描述为一个全面的联邦学习框架&a…

ShardingSphere数据库中间件

数据库中的数据量猛增&#xff0c;访问性能也变慢了&#xff0c;优化迫在眉睫 ? 1. 关系型数据库本身比较容易成为系统瓶颈&#xff1a;单机存储容量、数据库连接数、处理能力都有限。 2. 当单表的数据量达到 1000W 或 100G 以后&#xff0c;由于查询维度较多&#xff0c;即…

JavaEE进阶(6)SpringBoot 配置文件(作用、格式、properties配置文件说明、yml配置文件说明、验证码案例)

接上次博客&#xff1a;JavaEE进阶&#xff08;5&#xff09;Spring IoC&DI&#xff1a;入门、IoC介绍、IoC详解&#xff08;两种主要IoC容器实现、IoC和DI对对象的管理、Bean存储、方法注解 Bean)、DI详解&#xff1a;注入方式、总结-CSDN博客 目录 配置文件作用 Sprin…