题目:
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.
思想:
根据数独的性质,需要检查每一横排,每一竖排,以及每一个九宫格是否满足要求。采用遍历的方式,横排和竖排很容易解决。对于每一个九宫格,我们可以知道如果把九宫格按照行从0开始标号,那么数字board[i][j] 位于第 i/3*3+j/3 个九宫格内。
代码:
class Solution {
public:
bool isValidSudoku(vector<vector<char> >& board) {
int row[9][9] = {0};
int col[9][9] = {0};
int box[9][9] = {0};
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; ++j)
{
char c = board[i][j];
if (c == '.')
continue;
if (c<'1' || c>'9')
return false;
int number = c - '1';
if (row[i][number] || col[number][j] || box[i / 3 * 3 + j / 3][number])
return false;
row[i][number] = 1;
col[number][j] = 1;
box[i / 3 * 3 + j / 3][number] = 1;
}
}
return true;
}
};