[leedcode 36] Valid Sudoku

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.

public class Solution {
    public boolean isValidSudoku(char[][] board) {
        //本题思路:先每行每列判断是否有重复的数,此题借助arraylist,注意clear,contains,add等方法,当board中的元素不为‘.’时,才进行判断
        //判断完行和列,判断每个3*3的块。注意遍历的方式,四个for循环
        int len=board.length;
        List<Character> row=new ArrayList<Character>();
        List<Character> col=new ArrayList<Character>();
        for(int i=0;i<len;i++){
                row.clear();
                col.clear();
            for(int j=0;j<len;j++){
                
                char r=board[i][j];
                if(r!='.'){
                    if(row.contains(r))
                           return false;
                    else{
                        row.add(r);
                    }
                }
                char c=board[j][i];
                 if(c!='.'){
                    if(col.contains(c))
                           return false;
                    else{
                        col.add(c);
                    }
                }
    
            }
        }
        ArrayList<Character> block=new ArrayList<Character>();
        for(int k=0;k<len;k=k+3){//k代表块的行,s代表块的列。每个块再进行遍历
            for(int s=0;s<len;s=s+3){
                block.clear();
                for(int i=0;i<3;i++){
                    for(int j=0;j<3;j++){
                      char b=board[i+k][j+s];
                        if(b!='.'){
                            if(block.contains(b))
                               return false;
                            else{
                                block.add(b);
                            }
                        }  
                    }
                }
            }
        }
        
        
      return true;  
        
    }
}
原文地址:https://www.cnblogs.com/qiaomu/p/4634465.html