题目叙述
判断一个 9x9 的数独是否有效。只需要根据以下规则,验证已经填入的数字是否有效即可。
数字 1-9 在每一行只能出现一次。
数字 1-9 在每一列只能出现一次。
数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。
题目分析
- 遍历每行是否有相同的元素
- 遍历每列是否有相同的元素
- 遍历九个小方格
代码
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
//设置一个标记数组
bool used[9];//9个元素大小的标记数组
for(int i=0;i<9; i++){
//检查行
fill(used, used+9, false);
for(int j=0;j<9;j++){
if(board[i][j]=='.') continue;
if(used[board[i][j]-'1']) return false;
used[board[i][j]-'1'] = true;
}
fill(used, used+9, false);
//检查列
for(int j=0;j<9;j++){
if(board[j][i]=='.') continue;
if(used[board[j][i]-'1']) return false;
used[board[j][i]-'1'] = true;
}
}
//检查九个格子
for(int r=0;r<3;r++){//共有三层9宫格
for(int c=0;c<3;c++){//每一行又有三大列
fill(used, used+9, false);
for(int i=r*3;i<r*3+3;i++){// 0-3
for(int j=c*3;j<c*3+3;j++){
if(board[i][j]=='.') continue;
if(used[board[i][j]-'1']) return false;
used[board[i][j]-'1'] = true;
}
}
}
}
return true;
}
};