本题对不是‘.’的数按照条件进行三个方面的判断
一、本行没有相同的数
二、本列没有相同的数
三、该数所在的九格里面没有相同的数
主要难点在第三点,现根据该数的坐标计算出其所在的九格的左上角左表,然后按照三行三列遍历判断
package no1_50;
public class subject036 {
class Solution {
public boolean isValidSudoku(char[][] board) {
boolean[] used = new boolean[10];
//对行、列进行检查
for(int i=0; i<9; i++) {
//对行进行检查
for(int j=0; j<9; j++) {
char target = board[i][j];
if(!isValid(target, used)) {
return false;
}
}
fill(used);
//对列进行检查
for(int j=0; j<9; j++) {
char target = board[j][i];
if(!isValid(target, used)) {
return false;
}
}
fill(used);
}
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
fill(used);
for(int k=i*3;k<i*3+3; k++) {
for(int l=j*3; l<j*3+3; l++) {
char target = board[k][l];
if(!isValid(target, used)) {
return false;
}
}
}
System.out.println();
}
}
return true;
}
private void fill(boolean[] used) {
for(int i=0; i<used.length; i++) {
used[i] = false;
}
}
private boolean isValid(char target,boolean[] used) {
if(target=='.') {
return true;
}
//不是'.',判断数字有没有重复
int tmp = target - 48 ;
if(!used[tmp]) {
used[tmp] = true;
return true;
} else {
System.out.println(target);
return false;
}
}
}
public static void main(String[] args) {
subject036 subject = new subject036();
Solution s = subject.new Solution();
char[][] input = {
{'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'}
};
// int target = 1309;
boolean result = s.isValidSudoku( input );
System.out.println(result);
// String ss = 'a';
// System.out.println( ss.subString(1).length() );
}
}