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.
做了三次检查:每行有无重复元素,每列有无重复元素,每个sub-block有无重复元素。但满足这三个条件的数独就一定有解(valid与有解又是不同概念)吗?还未找到让人满意的答案。
class Solution {
public:
bool isValidSudoku(vector<vector<char> > &board) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
set<int> memory;
for(int i = 0; i<9; i++)
{
memory.clear();
for(int j = 0; j<9; j++)
{
if(memory.count(board[i][j])>0 && board[i][j]!='.') //注意STL set的用法
{
return false;
}
memory.insert(board[i][j]); //注意STL set的用法
}
}
for(int i = 0; i<9; i++)
{
memory.clear();
for(int j = 0; j<9; j++)
{
if(memory.count(board[j][i])>0 && board[j][i]!='.')
{
return false;
}
memory.insert(board[j][i]);
}
}
for(int i=0; i<9; i = i+3)
{
for(int j=0; j<9; j = j+3)
{
memory.clear();
for(int p = 0; p<3; p++)
{
for(int q = 0; q<3; q++)
{
if(memory.count(board[i+p][j+q])>0 && board[i+p][j+q]!='.')
{
return false;
}
memory.insert(board[i+p][j+q]);
}
}
}
}
return true;
}
};
本文介绍了一种通过三次检查来验证数独是否有效的方法:检查每一行、每一列及每一个子区块是否有重复数字。提供了C++实现代码,并讨论了有效数独与数独求解的区别。
1217

被折叠的 条评论
为什么被折叠?



