您的位置:首页 > 其它

Valid Sudoku

2015-07-13 17:43 218 查看

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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: