LeetCode进阶之路( Sudoku Solver)

来源:互联网 发布:三权分立司法知乎 编辑:程序博客网 时间:2024/06/09 20:05

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 void solveSudoku(char[][] board) {        healper(board);}public boolean healper(char[][] board) {for (int i = 0; i < board.length; i++) {for (int j = 0; j < board[0].length; j++) {if (board[i][j] == '.') {for (char z = '1'; z <= '9'; z++) {if (isValid(board, i, j, z)) {board[i][j] = z;if (healper(board))return true;//有解elseboard[i][j] = '.';// 回退}}return false;}}}return true;}private boolean isValid(char[][] board, int i, int j, char c) {// 检查行for (int row = 0; row < 9; row++)if (board[row][j] == c)return false;// 检查列for (int col = 0; col < 9; col++)if (board[i][col] == c)return false;// 检查9宫格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 (board[row][col] == c)return false;return true;}

种一棵树最好的时间是十年前,其次是现在!


0 0