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.
Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.
数独的规则是:
1、每一行1-9中每个数只能出现一次
2、每一列1-9中每个数只能出现一次
3、每一个3×3的子块中1-9中每个数只能出现一次
本题主要是设定一些标记来标定数字是否出现过,并将每一个格中的数字和标记的坐标相对应。
class Solution
{
public:
bool isValidSudoku(vector<vector<char>> &board)
{
vector<vector<bool>> vbRow(9, vector<bool>(9, false));
vector<vector<bool>> vbCol(9, vector<bool>(9, false));
vector<vector<bool>> vvbBlock(9, vector<bool>(9, false));
int nNum;
for (int nRowInd = 0; nRowInd < 9; nRowInd++)
{
for (int nColInd = 0; nColInd < 9; nColInd++)
{
if (board[nRowInd][nColInd] != '.')
{
nNum = board[nRowInd][nColInd] - '1';
if (vbRow[nRowInd][nNum] || vbCol[nNum][nColInd]
|| vvbBlock[(nRowInd / 3) * 3 + nColInd / 3][nNum])
return false;
vbRow[nRowInd][nNum] = vbCol[nNum][nColInd] =
vvbBlock[(nRowInd / 3) * 3 + nColInd / 3][nNum] = true;
}
}
}
return true;
}
};
ps:由于楼主愚笨,本题思路是仿照 http://blog.csdn.net/doc_sgl/article/details/13002461中思路改写的。。。。。