思路,将行,列,块分开写成数组,检查是否有重复
检查重复的规则是利用set的不重复,如果arraylist和set的size不同,说明有重复
class Solution {
public boolean isValidSudoku(char[][] board) {
boolean flag=true;
for(int i=0;i<board[0].length;i++){
flag=isValid(board[i]);
if(flag==false){
break;
}
}
if(flag==false){
return flag;
}
for(int i=0;i<board[0].length;i++){
char[] col=new char[9];
for(int j=0;j<9;j++){
col[j]=board[j][i];
}
flag=isValid(col);
if(flag==false){
break;
}
}
if(flag==false){
return flag;
}
for(int i=0;i<9;i+=3){
char[] block=new char[9];
for(int j=0;j<9;j+=3){
block[0]=board[i][j];
block[1]=board[i+1][j];
block[2]=board[i+2][j];
block[3]=board[i][j+1];
block[4]=board[i+1][j+1];
block[5]=board[i+2][j+1];
block[6]=board[i][j+2];
block[7]=board[i+1][j+2];
block[8]=board[i+2][j+2];
flag=isValid(block);
if(flag==false){
break;
}
}
if(flag==false){
break;
}
}
return flag;
}
public boolean isValid(char[] arr){
ArrayList<Character> al=new ArrayList<Character>();
for(int i=0;i<arr.length;i++){
if(arr[i]!='.'){
al.add(arr[i]);
}
}
HashSet<Character> hs=new HashSet<Character>();
int i=0;
for(char c:al){
if(i>=al.size()){
break;
}
hs.add(c);
}
if(al.size()!=hs.size()){
return false;
}else{
return true;
}
}
}

本文介绍了一种通过检查行、列及每个3x3宫格内的数字是否重复来验证数独盘面有效性的算法实现。利用了ArrayList和HashSet的数据结构特性进行判断。
1056

被折叠的 条评论
为什么被折叠?



