题目描述:
判断一个9*9的数独是否有效。只需根据以下规则,验证已经填入的数字是否有效即可。
解析:
本题的主要解题思路在于:建立哈希表(键值对关系),来表示存储任意个数在该维度上(行、列、九宫格box)是否出现过。
遍历条件分为三种;
【1】第i个行中是否出现
【2】第j个行中是否出现
【3】第j/3+(i/3)*3个box中是否出现
具体代码如下:
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
int row[9][10]={0};//建立行所对应的哈希表,有9行,而10列是为了与哈希表对应起来
int col[9][10]={0};//建立列所对应的哈希表,默认每一列都没有出现数字
int box[9][10]={0}; //对应九宫格box
//采用两层for循环遍历
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
//在第i行第j列进行三个条件的判断
if(board[i][j]=='.') continue; //如果该数为空,继续搜索
int curNumber=board[i][j]-'0'; //转换为数字
if(row[i][curNumber]) return false; //重复出现了
if(col[j][curNumber]) return false;
if(box[j/3+(i/3)*3][curNumber]) return false;
row[i][curNumber] = 1; //之前没有遇见,则置为1
col[j][curNumber] = 1;
box[j/3 + (i/3)*3][curNumber] = 1;
}
}
return true; //其他情况返回为真
}
};