package leetcode.wyj;
import java.util.HashSet;
import java.util.Set;
public class LeetCode36 {
public static void main(String[] args) {
char[][] a = {{'5', '3', '.', '.', '7', '.', '.', '.', '.'}, {'6', '.', '.', '1', '9', '5', '.', '.', '.'}, {'.', '9', '8', '.', '.', '.', '.', '6', '.'}, {'8', '.', '.', '.', '6', '.', '.', '.', '3'}, {'4', '.', '.', '8', '.', '3', '.', '.', '1'}, {'7', '.', '.', '.', '2', '.', '.', '.', '6'}, {'.', '6', '.', '.', '.', '.', '2', '8', '.'}, {'.', '.', '.', '4', '1', '9', '.', '.', '5'}, {'.', '.', '.', '.', '8', '.', '.', '7', '9'}};
isValidSudoku(a);
}
public static boolean isValidSudoku(char[][] board) {
//判断列是否重复
for (int i = 0; i < board.length; i++) {
//行
Set<Character> lineSet = new HashSet<>();
//列
Set<Character> rowSet = new HashSet<>();
//
Set<Character> childSet = new HashSet<>();
for (int j = 0; j < board[i].length; j++) {
if (board[i][j] != '.') {
if (lineSet.contains(board[i][j])) {
return false;
}
lineSet.add(board[i][j]);
}
if (board[j][i] != '.') {
if (rowSet.contains(board[j][i])) {
return false;
}
rowSet.add(board[j][i]);
}
if (board[i - i % 3 + j / 3][j / 3] != '.') {
if (rowSet.contains(board[j][i])) {
return false;
}
childSet.add(board[j][i]);
}
}
}
for (int i = 0; i < 7; i += 3) {
for (int j = 0; j < 7; j += 3) {
//列
Set<Character> set = new HashSet<>();
for (int n = i; n < i + 3; n++) {
for (int m = j; m < j + 3; m++) {
if (board[m][n] != '.') {
if (set.contains(board[m][n])) {
return false;
}
set.add(board[m][n]);
}
}
}
}
}
return true;
}
}