​https://leetcode.com/problems/valid-sudoku/​

在检测行是否合法时,i 表示矩阵的行,j 表示矩阵的列;
检测列是否合法时,i 表示矩阵的列,j 表示矩阵的行;
检测九宫格是否合法时,i 表示九宫格的标号,j 表示九宫格里的每个元素(只是我们需要根据i、j定位相应的元素到原来的矩阵: 第 i 个九宫格里面的第 j 个元素在原矩阵的第 3*(i/3) + j/3 行,第 3*(i%3) + j%3)列 ,“/” 表示整数除法)

class Solution {
public:
bool isValidSudoku(vector<vector<char> >& board) {
int row[9]={0};
int col[9]={0};
int box[9]={0};

for(int i=0;i<9;i++){
memset(row,0,sizeof(row));
memset(col,0,sizeof(col));
memset(box,0,sizeof(box));
for(int j=0;j<9;j++){
if(!isValid(board,row,i,j)||!isValid(board,col,j,i)||
!isValid(board,box,3*(i/3)+j/3,3*(i%3)+j%3)){
return false;
}
}
}
return true;
}
bool isValid(vector<vector<char> >& board,int data[],int r,int c){
if(board[r][c]!='.'){
if(data[board[r][c]-'1']>0)
return false;
else{
data[board[r][c]-'1']++;
return true;
}
}
return true;
}
};