思路:
1.将二维数组当做一维数组,用一个变量来代表元素的位置。例如board[i/9][i%9]就只使用了i来表示二维数组的元素。
2.暴力法组合两个不同的元素,如果不满足以下就返回0:
3.判断在同一个以粗实线分割的3*3宫内:
当i/9/3==j/9/3并且i%9/3==j%9/3时就表示两个元素在再用一个以粗实线分割的3*3的宫内。
c++代码:
class Solution {
public:
bool isValidSudoku(vector<vector<char>>& board) {
for(int i=0;i<9*9;i++){
if(board[i/9][i%9]<='9'&&board[i/9][i%9]>='0')
{
for(int j=i+1;j<81;j++){
if(!(board[i/9][i%9]<='9'&&board[i/9][i%9]>='0')){
continue;
}
else{
if(board[j/9][j%9]==board[i/9][i%9]){
if((j/9==i/9)||(j%9==i%9))
return 0;
else if(i/9/3==j/9/3&&j%9/3==i%9/3)
return 0;
else continue;
}
}
}
}
else{
continue;
}
}
return 1;
}
};