题目描述
我的解答:
我的解答中利用了Set不能存储重复的原理。set.add()判断是否重复
class Solution {
public boolean isValidSudoku(char[][] board) {
Set record=new HashSet();
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
if(board[i][j]!='.'){
//利用Set的add方法判断是否包含某个数字
if(!record.add("第"+i+"行有数字"+board[i][j])||!record.add("第"+j+"列有数字"+board[i][j])||!record.add("第"+i/3+"_"+j/3+"方块有数字"+board[i][j])){
return false;
}
}
}
}
return true;
}
}
我的结果:
另外一种高效的方法,没有使用Set,而是利用array存储
class Solution {
public boolean isValidSudoku(char[][] board) {
for(int i = 0;i < 9;i++){
boolean[] rowCheck = new boolean[9];
boolean[] colCheck = new boolean[9];
boolean[] boxCheck = new boolean[9];
for(int j = 0;j< 9;j++){
if(board[i][j] == '.'){}
else if(rowCheck[board[i][j] - '1']) return false;
else rowCheck[board[i][j] - '1'] = true;
if(board[j][i] == '.'){}
else if(colCheck[board[j][i] - '1']) return false;
else colCheck[board[j][i] - '1'] = true;
int m = i/3*3 + j/3;
int n = i%3*3 + j%3;
if(board[m][n] == '.') {}
else if(boxCheck[board[m][n] - '1']) return false;
else boxCheck[board[m][n] - '1'] = true;
}
}
return true;
}
}
运行结果: