public boolean isValidSudoku(char[][] board) {
Set<Character>[] sets = new Set[18];
Set<Character> set ;
int[] nums = new int[18];
int count ;
// 初始化实例
for (int i = 0; i < sets.length; i++){
sets[i] = new HashSet<>();
}
for (int i = 0; i < 9; i++){
count = 0;
set = new HashSet<>();
for (int j = 0; j < 9; j++){
if ( '0'< board[i][j] && board[i][j] < ':'){
// 某一列的元素符合数字要求
set .add(board[i][j]); // 这步毫无疑问
count ++;
//现在构造每一个列的set的判断条件
sets[j].add(board[i][j]); // 这样就将每一列输入到set里面了
nums[j] ++; // 记录每一列输入的数
// 现在要构造9方块, 从左往右
if (i < 3 && j < 3){
sets[9].add(board[i][j] );
nums[9]++;
}else if (i < 3 && j < 6){
sets[10].add(board[i][j] );
nums[10]++;
}else if (i < 3 && j < 9){
sets[11].add(board[i][j] );
nums[11]++;
}else if (i < 6 && j < 3){
sets[12].add(board[i][j] );
nums[12]++;
}else if (i < 6 && j < 6){
sets[13].add(board[i][j] );
nums[13]++;
}else if (i < 6 && j < 9){
sets[14].add(board[i][j] );
nums[14]++;
}else if (i < 9 && j < 3){
sets[15].add(board[i][j] );
nums[15]++;
}else if (i < 9 && j < 6){
sets[16].add(board[i][j] );
nums[16]++;
}else if (i < 9 && j < 9){
sets[17].add(board[i][j] );
nums[17]++;
}
}
}
if (set.size() < count){
// 每次判断每一行的数量, 不使用contain判断是因为它更耗时
return false;
}
}
// 这个for 用于判断每一列是否符合条件, 和9个方阵是否符合情况
for (int i = 0; i < 18; i++){
if (sets[i].size() < nums[i]){
return false;
}
}
return true;
}
10 . 有效的数独
最新推荐文章于 2024-01-14 08:20:10 发布