leet-code/src/main/java/leetcode/editor/cn/ValidSudoku.java
2021-04-29 23:21:52 +08:00

121 lines
4.1 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//请你判断一个 9x9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。
//
//
// 数字 1-9 在每一行只能出现一次。
// 数字 1-9 在每一列只能出现一次。
// 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)
//
//
// 数独部分空格内已填入了数字,空白格用 '.' 表示。
//
// 注意:
//
//
// 一个有效的数独(部分已被填充)不一定是可解的。
// 只需要根据以上规则,验证已经填入的数字是否有效即可。
//
//
//
//
// 示例 1
//
//
//输入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"]]
//输出true
//
//
// 示例 2
//
//
//输入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"]]
//输出false
//解释:除了第一行的第一个数字从 5 改为 8 以外,空格内其他数字均与 示例1 相同。 但由于位于左上角的 3x3 宫内有两个 8 存在, 因此这个数独是无
//效的。
//
//
//
// 提示:
//
//
// board.length == 9
// board[i].length == 9
// board[i][j] 是一位数字或者 '.'
//
// Related Topics 哈希表
// 👍 504 👎 0
package leetcode.editor.cn;
import java.util.HashMap;
import java.util.Map;
//36:有效的数独
public class ValidSudoku {
public static void main(String[] args) {
//测试代码
Solution solution = new ValidSudoku().new Solution();
System.out.println(solution.isValidSudoku(new char[][]{
{'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'}
}));
}
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public boolean isValidSudoku(char[][] board) {
Map<Integer, Integer>[] row = new HashMap[9];
Map<Integer, Integer>[] column = new HashMap[9];
Map<Integer, Integer>[] other = new HashMap[9];
for (int i = 0; i < 9; i++) {
row[i] = new HashMap<>();
column[i] = new HashMap<>();
other[i] = new HashMap<>();
}
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
char ch = board[i][j];
if (ch == '.') {
continue;
}
int num = ch - '0';
int otherIndex = (i / 3) * 3 + j / 3;
row[i].put(num,row[i].getOrDefault(num,0) + 1);
column[j].put(num,column[j].getOrDefault(num,0) + 1);
other[otherIndex].put(num,other[otherIndex].getOrDefault(num,0) + 1);
if (row[i].get(num) > 1 || column[j].get(num) > 1 || other[otherIndex].get(num) > 1) {
return false;
}
}
}
return true;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}