解题思路
傻瓜式做法 空间消耗大 , 但是只需要遍历一遍
直接根据数独的三个条件逐一进行判断, 不满足直接return false
代码
class Solution {
public boolean isValidSudoku(char[][] board) {
//共9个
Set<Character> set1 = new HashSet<>();
Set<Character> set2 = new HashSet<>();
Set<Character> set3 = new HashSet<>();
Set<Character> set4 = new HashSet<>();
Set<Character> set5 = new HashSet<>();
Set<Character> set6 = new HashSet<>();
Set<Character> set7 = new HashSet<>();
Set<Character> set8 = new HashSet<>();
Set<Character> set9 = new HashSet<>();
for (int i = 0; i < board.length; i++) {
Set<Character> setrow = new HashSet<>();
Set<Character> setcolumn = new HashSet<>();
for (int j = 0; j < board[0].length; j++) {
//1、列重复
if(board[j][i]!='.'){
if(!setcolumn.add(board[j][i])){
return false;
}
}
if(board[i][j]!='.'){
//行重复
if(!setrow.add(board[i][j])){
return false;
}
//九宫格重复
if(i<=2) {
if(j<=2) {
if(!set1.add(board[i][j])){
return false;
}
}else if(j>=3&&j<=5) {
if(!set2.add(board[i][j])){
return false;
}
}else {
if(!set3.add(board[i][j])){
return false;
}
}
}else if(i>=3&&i<=5){
if(j<=2) {
if(!set4.add(board[i][j])){
return false;
}
}else if(j>=3&&j<=5) {
if(!set5.add(board[i][j])){
return false;
}
}else {
if(!set6.add(board[i][j])){
return false;
}
}
}else {
if(j<=2) {
if(!set7.add(board[i][j])){
return false;
}
}else if(j>=3&&j<=5) {
if(!set8.add(board[i][j])){
return false;
}
}else {
if(!set9.add(board[i][j])){
return false;
}
}
}
}
}
}
return true;
}
}