36. Valid Sudoku
程序员文章站
2022-07-15 12:31:45
...
题目链接:https://leetcode.com/problems/valid-sudoku/description/
该题的思路比较明确,按照数独的要求判断即可:
1.判断每一行没有重复的元素;
2.判断每一列没有重复的元素;
3.判断每一个9宫格没有重复的元素。
关于元素个数的统计,一是可以采用count数组,二是用hashmap。代码如下:
class Solution {
public static boolean isValidSudoku(char[][] board) {
int[] count=new int[10];
for(int i=0;i<9;i++) {//判断行是否有重复数字
clear(count);
for(int j=0;j<9;j++) {
char c=board[i][j];
if(c!='.') {
count[c-'0']++;
if(count[c-'0']>=2)
return false;
}
}
}
for(int j=0;j<9;j++) {//判断列是否有重复数字
clear(count);
for(int i=0;i<9;i++) {
char c=board[i][j];
if(c!='.') {
count[c-'0']++;
if(count[c-'0']>=2)
return false;
}
}
}
for(int i=0;i<7;i=i+3) {//判断九宫格是否有重复数字
for(int j=0;j<7;j=j+3) {
clear(count);
for(int r=i;r<i+3;r++) {
for(int l=j;l<j+3;l++) {
char c=board[r][l];
if(c!='.') {
count[c-'0']++;
if(count[c-'0']>=2)
return false;
}
}
}
}
}
return true;
}
private static void clear(int[] nums) {
for(int i=0;i<nums.length;i++)
nums[i]=0;
}
}
下面是dicuss里面的两个解答,感觉还不错:
one:
public boolean isValidSudoku(char[][] board) {
for(int i = 0; i<9; i++){
HashSet<Character> rows = new HashSet<Character>();
HashSet<Character> columns = new HashSet<Character>();
HashSet<Character> cube = new HashSet<Character>();
for (int j = 0; j < 9;j++){
if(board[i][j]!='.' && !rows.add(board[i][j]))
return false;
if(board[j][i]!='.' && !columns.add(board[j][i]))
return false;
int RowIndex = 3*(i/3);
int ColIndex = 3*(i%3);
if(board[RowIndex + j/3][ColIndex + j%3]!='.' && !cube.add(board[RowIndex + j/3][ColIndex + j%3]))
return false;
}
}
return true;
}
two:
public boolean isValidSudoku(char[][] board) {
Set<String> set = new HashSet<>();
for (int row = 0; row < board.length; row++) {
for (int col = 0; col < board[row].length; col++) {
char val = board[row][col];
if (val != '.') {
int block = (row / 3 * 3) + (col / 3);
if (set.contains("r" + row + val) ||
set.contains("c" + col + val) ||
set.contains("b" + block + val))
return false;
else {
set.add("r" + row + val);
set.add("c" + col + val);
set.add("b" + block + val);
}
}
}
}
return true;
}
推荐阅读
-
【关于栈】Valid Parentheses详解
-
css3中检验表单的required,focus,valid和invalid样式
-
AndroidStudio构建项目提示错误信息“unable to find valid certification”的完美解决方案
-
entity framework异常 The specified cast from a materialized 'System.Int32' type to the 'System.String' type is not valid
-
参数验证 @Validated 和 @Valid 的区别
-
js is_valid_filename验证文件名的函数
-
CENTOS7错误:Cannot find a valid baseurl for repo: base/7/x86_6
-
[转载]—Health Check Reports Problem: Dependency$ p_timestamp mismatch for VALID objects (文档 ID 781959.1)
-
Linux安装Apache报错:Cannot find a valid baseurl for repo: base/7/x86_64解决方案
-
centos7安装docker后运行出现Cannot find a valid baseurl for repo: base/7/x86_64 错误,怎么解决?