Question
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.
My Solution
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
/*******************
* Variable:
* int row[9], col[9], board[9];
1. 遍歷讀取(i,j)位置的值
2. 如果是'.',則jmp 1;
3. 計算出r_i, c_i, b_i;
4. 分別判斷r_i, c_i, b_i是否合理,不合理則jmp 5,否則jmp 1;
5. 結束
*******************/
int row[9] = {0};
int col[9] = {0};
int boa[9]= {0};
int tmp = 0;
for(int r = 0; r < 9; r++)
{
for(int c = 0; c < 9; c++)
{
char val = board[r][c];
if('.' == val)
{
continue;
}
tmp = 1 << (val - '1');
// 判斷行
if(0 == (row[r] & tmp))
{
row[r] |= tmp;
}else
{
return false;
}
// 判斷列
if(0 == (col[c] & tmp))
{
col[c] |= tmp;
}else
{
return false;
}
// 判斷塊
int idx_b = (r / 3) * 3 + c / 3; //得到小塊位置
if(0 == (boa[idx_b] & tmp))
{
boa[idx_b] |= tmp;
}else
{
return false;
}
}
}
return true;
}
};