[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の下のマークが少し騒がしいです.やはり覚えておく必要があるので、コードを直接見ましょう.
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;
}