题目:
判断一个数独是否有效,根据:Sudoku Puzzles - The Rules。
数独部分填了数字,空的部分用 '.'
表示。
一个部分填充是有效的数独。
说明:
一个有效的数独(填了一部分的)不一定是可解的,只要已经填的数字是有效的即可。
解题:判断一个数独是否有效,只要判断每一个行、列、方格有没有重复的数字;通过Set集合来存储每一行的数字;
代码:
class Solution { public boolean isValidSudoku(char[][] board) { if(null == board || board.length < 9){ return false; } Set<Character> rowSet = new HashSet<Character>(); Set<Character> colSet = new HashSet<Character>(); Set<Character> cardSet = new HashSet<Character>(); for(int i=0;i<9;i++){ rowSet.clear(); colSet.clear(); cardSet.clear(); for(int j=0;j<9;j++){ if(rowSet.contains(board[i][j])){ return false; }else{ if(board[i][j] != '.'){ rowSet.add(board[i][j]); } } if(colSet.contains(board[j][i])){ return false; }else{ if(board[j][i] != '.'){ colSet.add(board[j][i]); } }
// 计算九宫格的行列下标 int r = j/3+i/3*3; int c = (j%3+i*3) % 9; if(cardSet.contains(board[r][(c)])){ return false; }else{ if(board[r][c] != '.'){ cardSet.add(board[r][c]); } } } } return true; } }