//Determine if a 9 x 9 Sudoku board is valid. Only the filled cells need to be v
//alidated according to the following rules:
//
//
// Each row must contain the digits 1-9 without repetition.
// Each column must contain the digits 1-9 without repetition.
// Each of the nine 3 x 3 sub-boxes of the grid must contain the digits 1-9 with
//out repetition.
//
//
// Note:
//
//
// A Sudoku board (partially filled) could be valid but is not necessarily solva
//ble.
// Only the filled cells need to be validated according to the mentioned rules.
//
//
//
//
// Example 1:
//
//
//Input: 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"]]
//Output: true
//
//
// Example 2:
//
//
//Input: board =
//[["8","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"]]
//Output: false
//Explanation: Same as Example 1, except with the 5 in the top left corner being
// modified to 8. Since there are two 8's in the top left 3x3 sub-box, it is inval
//id.
//
//
//
// Constraints:
//
//
// board.length == 9
// board[i].length == 9
// board[i][j] is a digit 1-9 or '.'.
//
// Related Topics Array Hash Table Matrix
// 👍 5534 👎 753
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public boolean isValidSudoku(char[][] board) {
for (int i = 0; i < 9; i++) {
if (!isValid(board, i, 0) || !isValid(board, i, 1) || !isValid(board, i, 2)) {
return false;
}
}
return true;
}
private boolean isValid(char[][] board, int index, int mode) {
boolean[] isOccupied = new boolean[9];
for (int i = 0; i < 9; i++) {
char ch = 0;
if (mode == 0) {
ch = board[index][i];
} else if (mode == 1) {
ch = board[i][index];
} else {
ch = board[index/3*3 + i / 3][index % 3 * 3 + i % 3];
}
if (ch == '.') {
continue;
} else {
int chIn = ch - '1';
if (chIn < 0 || chIn > 8) {
return false;
} else if (isOccupied[chIn]) {
return false;
} else {
isOccupied[chIn] = true;
}
}
}
return true;
}
}
//leetcode submit region end(Prohibit modification and deletion)