[leetcode]Valid Sudoku

1975 ワード

新しいブログは本稿のアルゴリズムと同様に,慣れるために->新しいブログアドレス:[leetcode]Valid Sudoku
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.
Note:
A valid Sudoku board (partially filled) is not necessarily solvable. Only the filled cells need to be validated.
この問題はできません.最後はほとんどcopyという大神のアルゴリズム#アルゴリズム#です.料理は比べて、数独を游ぶことができなくて、ここのいわゆるvalidが開場の振り方が合法であることをも知りませんか?それともこの数だけの解を指しますか?しかし、上のアルゴリズムを見ると、答えは前者を指しています.開場時の振り方が合法であれば、必ず解があるのではないでしょうか.もしそうでなければ、死局はどうしてvalidと呼ぶことができますか?
いずれにしても、具体的には、開局の振り方が合法かどうかをチェックする必要があります.これは比較的簡単で、頭を悩ませているのはblockの下のマークが少し騒がしいです.やはり覚えておく必要があるので、コードを直接見ましょう.
	public boolean isValidSudoku(char[][] board){
        boolean [][] rows=new boolean[9][9];
        boolean [][] cols=new boolean[9][9];
        boolean [][] blocks=new boolean[9][9];
        for (int i = 0; i < 9; ++i) {  
            for (int j = 0; j < 9; ++j) {
                int c = board[i][j] - '1';
                if (board[i][j] == '.') continue;  
                if (rows[i][c] || cols[j][c] || blocks[i - i % 3 + j / 3][c])  
                    return false;  
                rows[i][c] = cols[j][c] = blocks[i - i % 3 + j / 3][c] = true;  
            }  
        }  
        return true;  
    }