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.
对于检验的规则可访问链接: http://sudoku.com.au/TheRules.aspx
分别对 行 列 和小的九宫格进行校验即可。 关键在对小九宫格进行校验时范围的选取
public class ValidSudoku { //set集合用于存放元素值,进行重复性检查 public boolean isValidSudoku2(char[][] board) { Set<Character> set = new HashSet<Character>(); //按行检验 for(int i=0;i<9;i++) { for(int j=0;j<9;j++) { if(board[i][j]>='1' && board[i][j]<='9') { if(!set.add(board[i][j])) { return false; } } } set.clear(); } //按列检验 for(int i=0;i<9;i++) { for(int j=0;j<9;j++) { if(board[j][i]>='1' && board[j][i]<='9') { if(!set.add(board[j][i])) { return false; } } } set.clear(); } //按小的九宫格检验 for(int i=0;i<9;i+=3) { for(int j=0;j<9;j+=3) { for(int row=i;row<i+3;row++) { for(int column=j;column<j+3;column++) { if(board[row][column]>='1' && board[row][column]<='9') { if(!set.add(board[row][column])) { return false; } } } } set.clear(); } } return true; } public boolean isValidSudoku(char[][] board) { Set<Character> rows = new HashSet<>(); Set<Character> columns = new HashSet<>(); Set<Character> cubes = new HashSet<>(); for(int i=0;i<9;i++) { rows.clear(); columns.clear(); cubes.clear(); for(int j=0;j<9;j++) { //行检查 if(board[i][j]!='.' && !rows.add(board[i][j])) { return false; } //列检查 if(board[j][i]!='.' && !columns.add(board[j][i])) { return false; } //小的九宫格检查 int r = (i/3)*3; int c = (i%3)*3; if(board[r+j/3][c+j%3]!='.' && !cubes.add(board[r+j/3][c+j%3])) { return false; } } } return true; } }