Sudoku Solver
题目地址:
https://leetcode.com/problems/sudoku-solver/#/description
题目:
解题思路:
这道题应该使用递归,首先是当需要填(is '.')的时候才进行判断,让填入1-9个数字的时候,如果是ok的,那么就recursive的去解,如果可以解,那么返回true;但是如果填入'.'之后还不能解,那么返回false。最后如果没有进入判断'.',就在最后返回true。
代码:
https://leetcode.com/problems/sudoku-solver/#/description
题目:
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.
解题思路:
这道题应该使用递归,首先是当需要填(is '.')的时候才进行判断,让填入1-9个数字的时候,如果是ok的,那么就recursive的去解,如果可以解,那么返回true;但是如果填入'.'之后还不能解,那么返回false。最后如果没有进入判断'.',就在最后返回true。
代码:
public void solveSudoku(char[][] board) { if(board == null || board.length == 0){ return; } solve(board); } private boolean solve(char[][] board) { for(int i = 0; i <= 8; i++){ for(int j = 0; j <= 8; j++){ if(board[i][j] == '.'){ for(char num = '1'; num <= '9'; num++){ if(isValid(board, i, j, num)){ board[i][j] = num; if(solve(board)){ return true; } else{ board[i][j] = '.'; } } } return false; } } } return true; } private boolean isValid(char[][] board, int i, int j, char num) { for(int k = 0; k <= 8; k++){ if(board[i][k] == num){ return false; } } for(int k = 0; k <= 8; k++){ if(board[k][j] == num){ return false; } } for(int row = (i / 3) * 3; row <= (i / 3) * 3 + 2; row++){ for(int col = (j / 3) * 3; col <= (j / 3) * 3 + 2; col++){ if(board[row][col] == num){ return false; } } } return true; }

Comments
Post a Comment