Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.
The Sudoku board could be partially filled, where empty cells are filled with the character '.'
.
A partially filled sudoku which is valid.
Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.
Code:
/**
*
*/
package From21;
import java.util.Arrays;
/**
* @author MohnSnow
* @time 2015年6月16日 下午2:49:18
*
*/
public class LeetCode36 {
/**
* @param argsmengdx
* -fnst
*/
//400msA --- 原文地址---http://blog.csdn.net/china_wanglong/article/details/39233899
public static boolean isValidSudoku(char[][] board) {
boolean[] visited = new boolean[10];
//row
for (int i = 0; i < 9; i++) {
Arrays.fill(visited, false);
for (int j = 0; j < 9; j++) {
if (!check(visited, board[i][j])) {
return false;
}
}
}
//col
for (int i = 0; i < 9; i++) {
Arrays.fill(visited, false);
for (int j = 0; j < 9; j++) {
if (!check(visited, board[j][i])) {
return false;
}
}
}
//sub matrix
for (int i = 0; i < 9; i += 3) {
for (int j = 0; j < 9; j += 3) {
Arrays.fill(visited, false);
for (int k = 0; k < 9; k++) {
if (!check(visited, board[i + k / 3][j + k % 3])) {
return false;
}
}
}
}
return true;
}
public static boolean check(boolean[] visited, char c) {
if (c == '.') {
return true;
}
int num = c - '0';
if (num < 1 || num > 9 || visited[num]) {
return false;
} else {
visited[num] = true;
}
return true;
}
public static void main(String[] args) {
char[][] board = {
{ '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' }
};
System.out.println("寻找插入:" + Arrays.toString(board));
System.out.println("寻找插入:" + isValidSudoku(board));
}
}