LintCode389.判断数独是否合法
LintCode简单题:判断数独是否合法
问题描述:
请判定一个数独是否有效。
该数独可能只填充了部分数字,其中缺少的数字用
.
表示。注意事项:
一个合法的数独(仅部分填充)并不一定是可解的。我们仅需使填充的空格有效即可。
样例:
下列就是一个合法数独的样例。
分析:关于如何判断数独有效其实很简单,玩过的都知道,数独的每一行,每一列,每一个3*3的矩阵中不能出现重复的数字而且必须是1-9。那么Java代码是怎么完成的呢?
class Solution { /** * @param board: the board @return: wether the Sudoku is valid */ private Set<Character> set = new HashSet<Character>(); public boolean isValidSudoku(char[][] board) { //row for (int i = 0; i < 9; i++) { for(int j = 0; j < 9; j++) { if(!check(board[i][j])) return false; } set.clear(); } //column for (int i = 0; i < 9; i++) { for(int j = 0; j < 9; j++) { if(!check(board[j][i])) return false; } set.clear(); } //sub matrix for (int i = 0; i < 9; i++) { for(int j = 0; j < 9; j++) { if(!check(board[i/3*3 + j/3][i%3*3 + j%3])) return false; //这一行关于矩阵的处理是最亮的部分 } set.clear(); } return true; } public boolean check(char c) { if(c == '.') { return true; } else if(c >= '1' && c <= '9') { if (set.contains(c)) { return false; } else { set.add(c); return true; } } else { return false; } } };