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.
s思路:
1. sudoku判断。行、列、小方块分别判断。对行来说,每一行都判断有没有重复的数字,一般而言,用hash就可以判断,但这里数字都是有限范围的,直接用vector< bool>(9,0)来判断即可!
2. 为了省空间,可以只用一个vector< bool>(9,0),每行判断完即可清零重新写;另一种就是用vector
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
//
vector<vector<bool>> row(9,vector<bool>(10,0));
vector<vector<bool>> col(9,vector<bool>(10,0));
vector<vector<bool>> block(9,vector<bool>(10,0));
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
if(board[i][j]=='.') continue;
int cur=board[i][j]-'0';
int idx=i/3*3+j/3;//这里有一个可爱的bug:3*i/3就错误,需要3*(i/3)!
if(row[i][cur]||col[j][cur]||block[idx][cur])
return false;
row[i][cur]=1;
col[j][cur]=1;
block[idx][cur]=1;
}
}
return true;
}