有效的数独(数组)

news/2025/3/15 1:00:19/

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

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

注意:

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

解题思路:

1.直接求解

我们首先遍历9宫格的所有元素,然后使用3个二维数组遍历,记录对应的行,列以及3*3单元格是否有某个数字,如果出现冲突,直接返回false。

class Solution {public boolean isValidSudoku(char[][] board) {int len=board.length;int[][] cell=new int[len][len];int[][] column=new int[len][len];int[][] line=new int[len][len];for(int i=0;i<len;i++){for(int j=0;j<len;j++){if(board[i][j]=='.')continue;//当前格子的数字,num=2表示的数字是3,数组下标为0到9,不能取到9,所以需要-1int num=board[i][j]-'0'-1;//计算单元格int k=i/3*3+j/3;if(cell[k][num]!=0||line[i][num]!=0||column[j][num]!=0){return false;}cell[k][num]=line[i][num]=column[j][num]=1;}}return true;}
}

2.位运算

与上一种方法类似只不过将有些运算替换为位运算,如此不需要二维数组,提高效率。左移1是方便与运算的判断。与运算是用来判断该行或该列、该3×3单元格有没有这个数字,或运算是用来将这个数字添加到对应的行、列、单元格中。

class Solution {public boolean isValidSudoku(char[][] board) {int len=board.length;int[] cell=new int[len];int[] column=new int[len];int[] line=new int[len];for(int i=0;i<len;i++){for(int j=0;j<len;j++){if(board[i][j]=='.')continue;//1左移当前格子的数字(比如是2),1左移两位int num=1<<(board[i][j]-'0');//计算单元格int k=i/3*3+j/3;//与运算,两个操作数的对应二进制位都为1时,结果对应位为1,否则为0。if((cell[k]&num)>0||(line[i]&num)>0||(column[j]&num)>0){return false;}//或运算,两个操作数的对应二进制位有一个为1时,结果对应位为1,否则为0cell[k]|=num;line[i]|=num;column[j]|=num;}}return true;}
}

http://www.ppmy.cn/news/39411.html

相关文章

ChatGPT的技术路线

目录ChatGPT的技术路线基于 GPT-3.5&#xff0c;GPT-4 预计提升更明显GPT、Bert 均源自 Transformer 模型领先的 NLP 模型RLHF 与 TAMER 是重要架构支撑ChatGPT的技术路线 基于 GPT-3.5&#xff0c;GPT-4 预计提升更明显 ChatGPT 是基于 GPT-3.5 的主力模型。在互联网开源数据…

使用GIS空间分析进行植物生长区域选址

经过观察可以发现某种珍贵植物在山区的某个区域位置生长状况明显要比其他区域好很多&#xff0c;通过研究了解到这种植物生长具有严格的生长条件。为了能更好地保护该种植物的生长环境&#xff0c;现在需要使用GIS空间分析方法&#xff0c;将适合植物生长的区域找出来。 树谷资…

Ruby设计-基础语法

一、脚本语言 ​ 我似乎对于 Python 和 Ruby 强求太多了&#xff0c;我要让他们实现 C 的所有功能。他们确实可以实现所有的功能&#xff0c;但是他们的目的不是为了这个。 ​ 我也可以用 shell 实现很多复杂的算法&#xff0c;但是我绝对不会用他去写图着色或者动态规划。但…

TypeScript01-基础知识

基础类型 boolean 类型 let isDone: boolean false; // ES5&#xff1a;var isDone false;number 类型 let count: number 10; // ES5&#xff1a;var count 10;string 类型 let name: string "semliker"; // ES5&#xff1a;var name semlinker;Symbol 类…

Esp8266+阿里云+STM32点灯(二)

目录 1、简介 2、阿里云配置 2.1添加设备 2.2 发布设备 3、根据参数使用AT指令配置ESP使设备上线 1、简介 完成ESP8266固件烧录后&#xff0c;进行ESP8266模块连接阿里云。 2、阿里云配置 2.1添加设备 点击主页右上角控制台&#xff0c;如下图所示&#xff1a; 接着搜索物…

4.5--计算机网络之基础篇--2.网址到网页解析--(复习+深入)---好好沉淀,加油呀

1.浏览器做的第一步工作是解析 URL 对 URL 进行解析&#xff0c;从而生成发送给 Web 服务器的请求信息 URL? URL 实际上是请求服务器里的文件资源 当没有路径名时&#xff0c;就代表访问根目录下事先设置的默认文件&#xff0c;也就是 /index.html 或者 /default.html 这些文件…

Vue3电商项目实战-结算支付 3【05-结算-收货地址-添加、06-结算-收货地址-修改、07-结算-提交订单】

文章目录05-结算-收货地址-添加06-结算-收货地址-修改07-结算-提交订单05-结算-收货地址-添加 目的&#xff1a;实现收货地址的添加。 大致步骤&#xff1a; 独立组件&#xff0c;准备一个对话框完成表单布局完成确认添加操作 落的代码&#xff1a; 1.独立组件&#xff0c;准…

ChatGPT中文免登陆-ChatGPT中文版上线

ChatGPT不支持地区 ChatGPT 是一个开源平台&#xff0c;可在全球范围内使用&#xff0c;不应该存在地区限制。然而&#xff0c;由于某些原因&#xff0c;可能有地区对 ChatGPT 的访问有限制或屏蔽的情况。 如果您发现自己无法访问 ChatGPT&#xff0c;可以尝试以下解决方法&a…