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