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

        

    }

}

 

你可能感兴趣的:(code)