有效的数独[中等]

在这里插入图片描述

优质博文: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.mzph.cn/news/641296.shtml

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

相关文章

Elasticsearch:介绍 kNN query,这是进行 kNN 搜索的专家方法

作者&#xff1a;来自 Elastic Mayya Sharipova, Benjamin Trent 当前状况&#xff1a;kNN 搜索作为顶层部分 Elasticsearch 中的 kNN 搜索被组织为搜索请求的顶层&#xff08;top level&#xff09;部分。 我们这样设计是为了&#xff1a; 无论分片数量多少&#xff0c;它总…

云平台性能测试之网络性能测试

一、认识网络性能测试 网络性能测试是评估和测量计算机网络性能的过程&#xff0c;对于确保网络的有效运行和提供良好用户体验非常重要。网络性能测试可以实现以下目标&#xff1a; 性能评估&#xff1a; 网络性能测试可以帮助评估网络的整体性能。通过测量网络的带宽、延迟、…

python 面经

关于自身特点 1. 介绍下自己&#xff0c;讲一下在公司做的项目 2. 说一下熟悉的框架&#xff0c;大致讲下其特点 python 基础 1.可变与不可变类型区别 2.请解释join函数 3.请解释*args和**kwargs的含义&#xff0c;为什么使用* args&#xff0c;** kwargs&#xff1f; 4.解释…

实现纯Web语音视频聊天和桌面分享(附源码,PC端+移动端)

在网页里实现文字聊天是比较容易的&#xff0c;但若要实现视频聊天&#xff0c;就比较麻烦了。本文将实现一个纯Web版的视频聊天和桌面分享的Demo&#xff0c;可直接在浏览器中运行&#xff0c;不需要安装任何插件。 一. 主要功能及支持平台 1.本Demo的主要功能有 &#xff…

【书生·浦语】大模型实战营——第六次作业

使用OpenCompass 评测 InterLM2-chat-chat-7B 模型在C-Eval数据集上的性能 环境配置 1. 创建虚拟环境 conda create --name opencompass --clone/root/share/conda_envs/internlm-base source activate opencompass git clone https://github.com/open-compass/opencompass cd…

valgrind安装使用教程

安装 valgrind官网下载链接 安装过程&#xff1a; tar -xf valgrind-3.22.0.tar.bz2 cd valgrind-3.22.0/ ./configure make make install使用 基本工具 Memcheck&#xff0c;检测内存错误使用问题Callgrind&#xff0c;检查程序函数调用过程中出现的问题Cachegrind&#x…

LED闪烁

这段代码是用于STM32F10x系列微控制器的程序&#xff0c;主要目的是初始化GPIOA的Pin 0并使其按照特定的模式进行闪烁。下面是对这段代码的逐行解释&#xff1a; #include "stm32f10x.h"&#xff1a;这一行包含了STM32F10x系列微控制器的设备头文件。这个头文件包含…

【PWN · 格式化字符串|劫持fini_array|劫持got表】[CISCN 2019西南]PWN1

格式化字符串的经典利用&#xff1a;劫持got表。但是遇到漏洞点只能执行一次的情况&#xff0c;该怎么办&#xff1f; 前言 如果存在格式化字符串&#xff0c;保护机制开的不健全&#xff0c;通常可以劫持got表&#xff0c;构造后门函数。然而&#xff0c;如果不存在循环、栈溢…

gradle打包分离依赖jar

正常打包的jar是包含项目所依赖的jar包资源&#xff0c;而且大多数场景下的依赖资源是不会频繁的变更的&#xff0c;所以实际把项目自身jar和其所依赖的资源分离可以实现jar包瘦身&#xff0c;减小上传的jar包总大小&#xff0c;能实现加速部署的效果 一 原本结构 二 配置buil…

History命令解释,及一个相关的bash脚本(如何编写脚本程序从记录文件中提取history命令)

目 录 一、history命令介绍 1、history命令是什么&#xff1f; 2、history的主要功能 二、history命令的用法 1、语法 2、选项说明 3、命令实例 三、history和历史记录文件bash_history 四、history命令的相关配置 1&#xff0c;命令带时间展示-HISTTI…

BOSS直聘推荐搜索系统工程师校招面经

本文介绍2024届秋招中&#xff0c;BOSS直聘的推荐/搜索系统工程师岗位一面的面试基本情况、提问问题等。 12月投递了BOSS直聘的推荐/搜索系统工程师岗位&#xff0c;并不清楚所在的部门。目前完成了一面&#xff0c;在这里记录一下一面经历。 首先&#xff0c;这一次的投递就是…

机器学习_正则化、欠拟合和过拟合

文章目录 正则化欠拟合和过拟合正则化参数 正则化 机器学习中的正则化是在损失函数里面加惩罚项&#xff0c;增加建模的模糊性&#xff0c;从而把捕捉到的趋势从局部细微趋势&#xff0c;调整到整体大概趋势。虽然一定程度上地放宽了建模要求&#xff0c;但是能有效防止过拟合…

用通俗易懂的方式讲解:使用 MongoDB 和 Langchain 构建生成型AI聊天机器人

想象一下&#xff1a;你收到了你梦寐以求的礼物&#xff1a;一台非凡的时光机&#xff0c;可以将你带到任何地方、任何时候。 你只有10分钟让它运行&#xff0c;否则它将消失。你拥有一份2000页的PDF&#xff0c;详细介绍了关于这台时光机的一切&#xff1a;它的历史、创造者、…

【计算机网络】应用层——HTTP 协议(一)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】 本专栏旨在分享学习计算机网络的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 一、什么是 HTTP 协…

Unity3D在车载导航系统的应用场景浅谈

Unity3D在车载导航系统的应用场景非常广泛&#xff0c;它可以为车载导航系统带来更加逼真、直观和准确的使用体验。以下是几个具体的应用场景&#xff1a; 3D地图导航&#xff1a;Unity3D的实时3D渲染能力使得车载导航系统可以实现3D地图导航功能。通过Unity3D&#xff0c;可以…

假期刷题打卡--Day10

一、C语言刷题 预处理命令模块的题目就只有几个&#xff0c;下面开始选择结构这个模块的题目。 1、MT1112中庸之道 请编写一个简单程序&#xff0c;输入3个整数&#xff0c;比较他们的大小&#xff0c;输出中间的那个数 格式 输入格式&#xff1a; 输入整型&#xff0c;空…

linux源码编译安装llvm

目录 1 建立文件夹llvm 2 下载源码到llvm文件夹 3 解压上述文件 4 将解压后的3个文件夹改名&#xff0c;并移动到llvm-9.0.0.src中&#xff1a; 5 在llvm文件夹内建立build文件夹&#xff0c;并进入该文件夹&#xff1a; 6 执行cmake命令 7 make 8 安装 9 安装成功后…

java中哈希家族底层原理

HashSet如何判断两个对象是否相等&#xff1f; 在Java中&#xff0c;HashSet是使用哈希表实现的&#xff0c;其核心是通过对象的哈希码来快速查找和判断元素是否存在。在判断两个对象是否相等时&#xff0c;HashSet并不直接比较对象的内容&#xff0c;而是通过比较它们的哈希码…

01_前端框架之Bootstrap的应用

day01_前端框架之Bootstrap的应用 本课目标 能够完成 Bootstrap 环境搭建能够理解 Bootstrap 的栅格布局能够根据 Bootstrap 相关文档使用Bootstrap组件能够根据 Bootstrap 重构主页和表单页 第1章 bootstrap简介 1.1 什么是bootstrap Bootstrap 是全球最受欢迎的前端组件库…

ES模糊查询不区分大写

一、 概述 最近接到新任务&#xff0c;产品说名称能支持模糊搜索&#xff0c;且不区分大小写。 以为是数据库操作&#xff0c;那岂不是easy&#xff0c;分分钟的事情&#xff0c;往往事情觉得简单的时候就不简单了&#xff0c;脑子忽然闪现想起该模块数据是放在ES里的&#xf…