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;
    }
}

 

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务