leetcode 36. 有效的数独 Valid Sudoku【使用集合】
把每个数字按照其查看规则分别编码成三个字符串。设第i行第j列的数字为n,编码如下:
- 按照行规则: i(n)
- 按照列规则:(n)j
- 按照3x3的规则:i/3(n)j/3
例如第1行第4列的9被分别编码为"1(9)"、"(9)4"、"0(9)1"(因为它在第(0,1)个3x3的块中)
这样的话就可以把每个数字的所有三个编码都放进同一个hashset中进行去重,而互相不影响,就不需要为三种规则建立三个hashset了。 当某数字的编码串已经在set中,说明违反了数独规则。
java
class Solution {
public boolean isValidSudoku(char[][] board) {
Set<String> myset = new HashSet<>();
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
char c = board[i][j];
if(c!='.')
{
String s = "(" + c + ")";
if(!myset.add(i+s) || !myset.add(s+j) || !myset.add(i/3+s+j/3))
return false;
}
}
}
return true;
}
}