题目描述:
Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules.
The Sudoku board could be partially filled, where empty cells are filled with the character'.'.
A partially filled sudoku which is valid.
思路解析:
- 注意使用HashSet来保持元素的唯一性
- 首先看每一行不要重复,如果是‘.’的话,就看下一个,如果set里面有,证明不符合,返回false
- 同样的方法看每一列是不是符合条件
- 然后需要看每个小方格,方法是一样的,但是注意行和列的关系
- 9个小方格,所以第一层for循环是0-9;然后计算行,因为每行有是3个,按编号 /3,范围是再基础上加3;然后计算列,因为每一列是可以直接取余得到的,按编号 %3,范围是再加上3
代码:
import java.util.*;
public class Solution {
public boolean isValidSudoku(char[][] board) {
HashSet<Character> set = new HashSet<Character>();
for(int i=0;i<9;i++){
for(int j=0;j<9;j++){
if(board[i][j]=='.')
continue;
if(set.contains(board[i][j]))
return false;
set.add(board[i][j]);
}
set.clear();
}
for(int j=0;j<9;j++){
for(int i=0;i<9;i++){
if(board[i][j]=='.')
continue;
if(set.contains(board[i][j]))
return false;
set.add(board[i][j]);
}
set.clear();
}
for(int k=0;k<9;k++){
for(int i=k/3*3;i<k/3*3+3;i++){
for(int j=k%3*3;j<k%3*3+3;j++){
if(board[i][j]=='.')
continue;
if(set.contains(board[i][j]))
return false;
set.add(board[i][j]);
}
}
set.clear();
}
return true;
}
}