博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] Valid Sudoku 验证数独
阅读量:5780 次
发布时间:2019-06-18

本文共 1348 字,大约阅读时间需要 4 分钟。

Determine if a Sudoku is valid, according to: .

The Sudoku board could be partially filled, where empty cells are filled with the character '.'.

A partially filled sudoku which is valid.

Note:

A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.

这道题让我们验证一个方阵是否为,判断标准是看各行各列是否有重复数字,以及每个小的3x3的小方阵里面是否有重复数字,如果都无重复,则当前矩阵是数独矩阵,但不代表待数独矩阵有解,只是单纯的判断当前未填完的矩阵是否是数独矩阵。那么根据数独矩阵的定义,我们在遍历每个数字的时候,就看看包含当前位置的行和列以及3x3小方阵中是否已经出现该数字,那么我们需要三个标志矩阵,分别记录各行,各列,各小方阵是否出现某个数字,其中行和列标志下标很好对应,就是小方阵的下标需要稍稍转换一下,具体代码如下: 

class Solution {public:    bool isValidSudoku(vector
> &board) { if (board.empty() || board[0].empty()) return false; int m = board.size(), n = board[0].size(); vector
> rowFlag(m, vector
(n, false)); vector
> colFlag(m, vector
(n, false)); vector
> cellFlag(m, vector
(n, false)); for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { if (board[i][j] >= '1' && board[i][j] <= '9') { int c = board[i][j] - '1'; if (rowFlag[i][c] || colFlag[c][j] || cellFlag[3 * (i / 3) + j / 3][c]) return false; rowFlag[i][c] = true; colFlag[c][j] = true; cellFlag[3 * (i / 3) + j / 3][c] = true; } } } return true; }};

本文转自博客园Grandyang的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
确认过眼神(*╹▽╹*),这就是大家想要的BCH
查看>>
福布斯新闻顾问:比特币的设计缺陷制约比特币发展前景
查看>>
vue踩坑记录之:手机端查看vue项目与 listen EADDRNOTAVAIL报错
查看>>
前端性能优化--浏览器存储
查看>>
为什么要学习Python?学习Python可以做什么?
查看>>
测试工程师值得被尊重!是否有此共鸣!
查看>>
dubbo之SPI
查看>>
css3 绘制画圆、扇形
查看>>
Python抽象类
查看>>
【速记】React解决IE浏览器svg标签不支持innerHTML操作的问题及相关拓展知识
查看>>
浅谈cookie,session和localStorage,sessionStorage的区别
查看>>
android 记一次解决键盘遮挡问题
查看>>
[性能优化]DateFormatter轻度优化探索
查看>>
关于井字游戏自己的解题思路吧.
查看>>
我的 Vue.js 学习日记 (二)
查看>>
iOS 多工程编联(子工程为库工程)
查看>>
Linux打包压缩命令 - zip,gzip,bzip2,tar
查看>>
vue单文件组件lint error自动fix及styleLint报错自动fix
查看>>
阿里云SDK再升级,宣布支持C++语言
查看>>
SQL Server 索引内部结构:SQL Server 索引进阶 Level 10
查看>>