389. 判断数独是否合法
请判定一个数独是否有效。
该数独可能只填充了部分数字,其中缺少的数字用 . 表示。
样例
样例1:
输入:
["53..7....","6..195...",".98....6.","8...6...3","4..8.3..1","7...2...6",".6....28.","...419..5","....8..79"]
输出: true
样例说明:
这个数独如下图所示,他是合法的。
样例 2:
输入:
["53..75...","6..195...",".98....6.","8...6...3","4..8.3..1","7...2...6",".6....28.","...419..5","....8..79"]
输出: false
样例说明:
这个数独如下图所示。他是不合法的因为他的第一行和第六列有两个5。
说明
What is Sudoku?
注意事项
一个合法的数独(仅部分填充)并不一定是可解的。我们仅需使填充的空格有效即可。
public class Solution {
/**
* @param board: the board
* @return: whether the Sudoku is valid
*/
public boolean isValidSudoku(char[][] board) {
// write your code here
if (board == null) return false;
int flag = 0;
boolean temp = false;
HashSet<Character> hashSet = new HashSet<>();
HashSet<Character> hashSet2 = new HashSet<>();
HashSet<Character> hashSet3 = new HashSet<>();
for (int i = 0; i < board.length; i++) {
temp = (i % 3 == 2);
for (int j = 0; j < board[0].length; j++) {
if (board[i][j] != '.') {
if (hashSet.contains(board[i][j])) return false;
hashSet.add(board[i][j]);
}
if (board[j][i] != '.') {
if (hashSet2.contains(board[j][i])) return false;
hashSet2.add(board[j][i]);
}
if (temp) {
if (board[i][j] != '.') {
if (hashSet3.contains(board[i][j])) return false;
hashSet3.add(board[i][j]);
}
if (board[i - 1][j] != '.') {
if (hashSet3.contains(board[i - 1][j])) return false;
hashSet3.add(board[i - 1][j]);
}
if (board[i - 2][j] != '.') {
if (hashSet3.contains(board[i - 2][j])) return false;
hashSet3.add(board[i - 2][j]);
}
flag++;
if (flag == 3) {
hashSet3.clear();
flag = 0;
}
}
}
hashSet.clear();
hashSet2.clear();
}
return true;
}
}