问题:源于leetcode。这不是要求解数独,而是判断当前的局面有没有违反数独的要求。
思路:注意这几点。1、数独都是9*9的;2,数组的九个数字是1~9,跟计算机中常见的0起始的0~8要做个区分。
判断方法:按照规定:1、每行没有重复数。2、每列没有重复数。3、9个小方形中也没有重复数。
代码:
class Solution {
public:
bool isValidSudoku(vector<vector<char> > &board) {
int n = board.size();
if(n != 9)
return false;
int nine[9];
//every row
for(int i=0;i<9;i++)
{
memset(nine, 0, sizeof(nine));
for(int j=0;j<9;j++)
{
if(board[i][j] == '.')
continue;
else
{
if(nine[board[i][j] -'1'] == 0)
nine[board[i][j] -'1'] = 1;
else
return false;
}
}
}
//every col
for(int i=0;i<9;i++)
{
memset(nine, 0, sizeof(nine));
for(int j=0;j<9;j++)
{
if(board[j][i] == '.')
continue;
else
{
if(nine[board[j][i] - '1'] == 0)
nine[board[j][i] - '1'] = 1;
else
return false;
}
}
}
//every 9
int base_r, base_c;
for(base_r = 0;base_r<3;base_r++)
{
for(base_c = 0;base_c<3;base_c++)
{
memset(nine, 0, sizeof(nine));
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(board[i+base_r*3][j+base_c*3] == '.')
continue;
else
{
if(nine[board[i+base_r*3][j+base_c*3] - '1'] == 0)
nine[board[i+base_r*3][j+base_c*3] - '1'] = 1;
else
return false;
}
}
}
}
}
return true;
}
};