1. valid sudoku
public booleanisValidSudoku(char[][] board) {
// Start typing your Java solution below
// DO NOT write main() function
if (board.length != 9 || board[0].length != 9){
returnfalse;
}
// row
for (int i = 0; i < 9; i++){
int[]array = new int[10];
for (int j= 0; j < 9; j++) {
char ch = board[i][j];
if (ch < '0'|| ch > '9') {
continue;
}
int num = ch - '0';
array[num] ++;
if (array[num]> 1) {
return false;
}
}
}
// column
for (int j = 0; j < 9; j++){
int[]array = new int[10];
for (int i= 0; i < 9; i++) {
char ch = board[i][j];
if (ch < '0'|| ch > '9') {
continue;
}
int num = ch - '0';
array[num] ++;
if (array[num]> 1) {
return false;
}
}
}
// block
for (int i = 0; i <= 6; i += 3){
for (int j= 0; j <= 6; j+=3) {
int[] array = newint[10];
for (int row = i; row< i+3; row++) {
for (int col = j; col < j+3;col++) {
char ch =board[row][col];
if (ch< '0' || ch > '9') {
continue;
}
int num =ch - '0';
array[num]++;
if(array[num] > 1) {
return false;
}
}
}
}
}
return true;
}
public voidsolveSudoku(char[][] board) {
// Start typing your Java solution below
// DO NOT write main() function
solve(board);
}
private booleansolve(char[][] board) {
for (int i = 0; i < 9; i++){
for (int j= 0; j < 9; j++) {
if (board[i][j] == '.'){
for (int k = 1; k <= 9; k++){
board[i][j] = (char) ( k + '0');
if(isValid(board, i, j) &&solve(board)) {
return true;
}
board[i][j] = '.';
}
return false;
}
}
}
return true;
}
private booleanisValid(char[][] board, int row, int col) {
HashSet<Character>set = new HashSet<Character>();
// row
set.clear();
for (int j = 0; j < 9; j++){
char tmp =board[row][j];
if(set.contains(tmp)) {
return false;
}
if (tmp<= '9' && tmp> '0') {
set.add(tmp);
}
}
// col
set.clear();
for (int i = 0; i < 9; i++){
char tmp =board[i][col];
if(set.contains(tmp)) {
return false;
}
if (tmp<= '9' && tmp> '0') {
set.add(tmp);
}
}
// block
set.clear();
int startRow = row/3*3;
int startCol = col/3*3;
for (int i = startRow; i <startRow+3; i++) {
for (int j= startCol; j < startCol+3; j++) {
char tmp = board[i][j];
if (set.contains(tmp)){
return false;
}
if (tmp <= '9'&& tmp > '0'){
set.add(tmp);
}
}
}
return true;
}
就是检测每行,每列,每个block是否有重复数字。
public class Solution {
}
sudoku solver
中心思想:找到第一个 .的位置,依次填1-9,然后看看剩下的能否被solve。不能的话此点重置.
public class Solution {
}