您的位置:首页 > 其它

LeetCode :Sudoku Solver

2017-05-10 11:10 316 查看


Sudoku Solver

Total Accepted: 13937 Total
Submissions: 66832My Submissions

Write a program to solve a Sudoku puzzle by filling the empty cells.

Empty cells are indicated by the character
'.'
.

You may assume that there will be only one unique solution.



A sudoku puzzle...



...and its solution numbers marked in red.

public class Solution {
public void solveSudoku(char[][] board) {
solve(board);

}
private boolean solve(char[][] board) {
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j ++) {
if (board[i][j] =='.') {
for (char k = '1'; k <= '9'; k++) {
board[i][j] = k;
if (isValid(board, i, j) && solve(board)) {
return true;
}
board[i][j] = '.';
}
return false;
}
}
}
return true;
}
private boolean isValid(char[][] board,int x, int y ) {
boolean [][] square = new boolean[9][9];
for (int i = 0; i < 9; i++) {
if (y != i &&board[x][y] == board[x][i]){
return false;
}
}
for (int i = 0; i < 9; i++) {
if (x != i &&board[i][y] == board[x][y]){
return false;
}
}
for (int i = (x / 3) * 3; i < (x / 3) * 3 + 3; i++) {
for (int j = (y /3) * 3; j < (y / 3) *3 + 3; j++) {
if (x != i && y != j && board[i][j] == board[x][y]) {
return false;
}
}
}
return true;
}

}
这个题目比較有意图。第一次做的时候 是对每个位置生成后的做推断。在ECLIPSE上是过的。可是在OJ上超时了。

之后才想到,并不须要对整个矩阵做推断,仅仅要对更改位置的字进行推断是不是符合要求就能够了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: