[Leetcode] valid sudoku 有效数独
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.
The Sudoku board could be partially filled, where empty cells are filled with the character'.'.

A partially filled sudoku which is valid.
题意:判断矩阵是否是一个数独矩阵。所谓的数独矩阵就是9*9的矩阵,每一行一个元素只出现一次、每一列一个元素只出现一次,并且在任意一个小矩阵(3×3)中一个元素只出现一次(所说的元素指0-9这九个数字)。a)第i个九宫格的第j个格点的行号可表示为i/3*3+j/3;b)第i个九宫格的第j个格点的列号可表示为i%3*3+j%3(详见陆草纯的博客)。整体的思路是:开辟三个二维标志数组,m[i][j]表示当前的这个位置,是否被访问过。
代码一陆草纯的博客,代码如下:
class Solution {
public:
bool isValidSudoku(vector<vector<char> > &board) {
for(int i = ; i < ; i ++)
{
unordered_map<char, bool> m1; //check i_th row
unordered_map<char, bool> m2; //check i_th column
unordered_map<char, bool> m3; //check i_th subgrid
for(int j = ; j < ; j ++)
{
if(board[i][j] != '.')
{
if(m1[board[i][j]] == true)
return false;
m1[board[i][j]] = true;
}
if(board[j][i] != '.')
{
if(m2[board[j][i]] == true)
return false;
m2[board[j][i]] = true;
}
if(board[i/*+j/][i%*+j%] != '.')
{
if(m3[board[i/*+j/][i%*+j%]] == true)
return false;
m3[board[i/*+j/][i%*+j%]] = true;
}
}
}
return true;
}
};
因为只要考虑出现的数字是否有重复的,所以,只需用当前元素的值转化为坐标信息,访问就行。Grandyang代码二:
class Solution {
public:
bool isValidSudoku(vector<vector<char> > &board)
{
int row=board.size(),col=board[].size();
if(row !=||col !=) return false;
vector<vector<bool>> rowFlag(row,vector<bool>(col,false));
vector<vector<bool>> colFlag(row,vector<bool>(col,false));
vector<vector<bool>> cellFlag(row,vector<bool>(col,false));
for(int i=;i<row;++i)
{
for(int j=;j<col;++j)
{
if(board[i][j]>=''&&board[i][j]<='')
{
int c=board[i][j]-'';
if(rowFlag[i][c]||colFlag[c][j]||cellFlag[*(i/)+j/][c])
return false;
rowFlag[i][c]=true;
colFlag[c][j]=true;
cellFlag[*(i/)+j/][c]=true;
}
}
}
return true;
}
};
想把代码一按照代码二那样写,总是通不过,抽时间再看看问题出在哪。
[Leetcode] valid sudoku 有效数独的更多相关文章
- [LeetCode] Valid Sudoku 验证数独
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...
- LeetCode:36. Valid Sudoku,数独是否有效
LeetCode:36. Valid Sudoku,数独是否有效 : 题目: LeetCode:36. Valid Sudoku 描述: Determine if a Sudoku is valid, ...
- LeetCode:Valid Sudoku,Sudoku Solver(数独游戏)
Valid Sudoku Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku bo ...
- LeetCode——Valid Sudoku
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...
- Leetcode Valid Sudoku
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...
- LeetCode: Valid Sudoku 解题报告
Valid SudokuDetermine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku boa ...
- [LeetCode] 36. Valid Sudoku 验证数独
Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to th ...
- [leetcode]36. Valid Sudoku验证数独
Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to th ...
- lintcode:Valid Sudoku 判断数独是否合法
题目: 判断数独是否合法 请判定一个数独是否有效.该数独可能只填充了部分数字,其中缺少的数字用 . 表示. 样例 下列就是一个合法数独的样例. 注意 一个合法的数独(仅部分填充)并不一定是可解的.我们 ...
随机推荐
- appium -- 页面出现弹窗,关闭后,无法识别页面元素
1. 问题:如图所示:在修改手势密码的过程中,点击了返回按钮后,弹出该弹窗:点击继续设置后,就发现 driver.getPageSource()获取不到页面元素.在找了一圈无用的资料后,没有什么好的处 ...
- keepalived+nginx实现高可用+tomcat
1.keepalived的yum安装 安装依赖包[root@localhost ~]# yum install -y curl gcc openssl-devel libnl3-devel net-s ...
- Python字符串格式化符号及转义字符含义(非常全!!!)
字符串格式化符号含义 符号 说明 %c 格式化字符及其 ASCII 码 %s 格式化字符串 %d 格式化整数 %o 格式化无符号八进制数 %x 格式化无符号十六进制数 %X 格式化无符号十六进制数(大 ...
- 应用UserDefaults储存游戏分数和最高分
应用UserDefaults储存游戏分数和最高分 我们在GameScene.swift里 private var currentScore:SKLabelNode! // 当前分数节点 private ...
- [转]Excel数据转化为sql脚本
在实际项目开发中,有时会遇到客户让我们把大量Excel数据导入数据库的情况.这时我们就可以通过将Excel数据转化为sql脚本来批量导入数据库. 1 在数据前插入一列单元格,用来拼写sql语句. 具体 ...
- Linux服务架设篇--arp命令
ARP,地址解析协议.在以太局域网中,主机之间交换数据帧时,是通过MAC地址进行的.因此,当以太网的一台主机向另一台IP地址的主机发送数据包时,它需要知道目的IP地址所对应的MAC地址,才能把这个IP ...
- 软工Hello World!团队第二周博客汇总
2017.10.20-2017.10.26 Scrum会议: 第一天:http://www.cnblogs.com/liusx0303/p/7704482.html 第二天:http://www.cn ...
- Thunder团队第五周 - Scrum会议1
Scrum会议1 小组名称:Thunder 项目名称:i阅app Scrum Master:杨梓瑞 工作照片: 邹双黛在照相,所以图片中没有该同学. 参会成员: 王航:http://www.cnblo ...
- java—连连看-实现封装
1.封装 Chess.java package Linkup; /** * 棋子封装类 * * @author laixl * */ public class Chess { // 图片的 状态 // ...
- lintcode-142-O(1)时间检测2的幂次
142-O(1)时间检测2的幂次 用 O(1) 时间检测整数 n 是否是 2 的幂次. 样例 n=4,返回 true; n=5,返回 false. 挑战 O(1) time 标签 比特位操作 思路 使 ...