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;
}
};