標籤:leetcode java sudoku solver
題目:
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.
題意:
寫出一個程式通過填充空格解決數獨問題。
這些空格被字元‘.‘填充。
你可以假設只有一個唯一的解。
演算法分析:
* 第一反應就是N皇后問題。就是一點點嘗試著填數,不行的話就回溯,直到都填滿就返回。
*
* 如果對一個格子嘗試從0~9都不行,那麼說明整個sudoku無解,返回false就好。
*
* 對整個棋盤所有‘.‘都填完了,那麼就可以返回true了
AC代碼:
public class Solution{ public void solveSudoku(char[][] board) { solveSudokudfs(board); } private static boolean solveSudokudfs(char[][] board) {for(int i=0;i<9;i++){for(int j=0;j<9;j++){if(board[i][j]=='.'){for(int k=1;k<=9;k++){board[i][j]=(char)(k+'0');//嘗試if(isValid(board,i,j)&& solveSudokudfs(board))return true;board[i][j]='.';//回退}return false;}}}return true;} private static boolean isValid(char[][] board, int i, int j) { for(int k=0;k<9;k++) { if(k!=j && board[i][k]==board[i][j]) return false; } for(int k=0;k<9;k++) { if(k!=i && board[k][j]==board[i][j]) return false; } for(int row = i/3*3; row<i/3*3+3; row++) { for(int col=j/3*3; col<j/3*3+3; col++) { if((row!=i || col!=j) && board[row][col]==board[i][j]) return false; } } return true; } }
著作權聲明:本文為博主原創文章,轉載註明出處
[LeetCode][Java] Sudoku Solver