个人记录-LeetCode 37. Sudoku Solver
2016-11-29 20:00
411 查看
问题:
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.
代码示例:
参考LeetCode 36. Valid Sudoku中判断Sudoku是否有效的第二种方法,
结合递归解决。
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.
代码示例:
参考LeetCode 36. Valid Sudoku中判断Sudoku是否有效的第二种方法,
结合递归解决。
public class Solution { public void solveSudoku(char[][] board) { boolean[][] row = new boolean[9][9]; boolean[][] column = new boolean[9][9]; boolean[][] unit = new boolean[9][9]; for (int i = 0; i < 9; ++i) { for (int j = 0; j < 9; ++j) { if (board[i][j] == '.') { continue; } int loc = board[i][j] - '1'; row[i][loc] = true; column[j][loc] = true; unit[(i/3)*3 + j/3][loc] = true; } } findTheResult(board, row, column, unit, 0, 0); } private static boolean findTheResult(char[][] board, boolean[][] row, boolean[][] column, boolean[][] unit, int rowIndex, int columnIndex) { //找到本次应该写入值的位置 while(rowIndex < 9) { if (board[rowIndex][columnIndex] == '.') { break; } if (columnIndex == 8) { ++rowIndex; columnIndex = 0; } else { ++columnIndex; } } //写满了,说明找到结果 if (rowIndex == 9) return true; //每个位置,都试着写入所有可能的数 for (int k = 0; k < 9; ++k) { //不能重复 if (row[rowIndex][k] || column[columnIndex][k] || unit[(rowIndex/3)*3 + columnIndex/3][k]) { continue; } board[rowIndex][columnIndex] = (char)(k + '1'); row[rowIndex][k] = true; column[columnIndex][k] = true; unit[(rowIndex/3)*3 + columnIndex/3][k] = true; //递归写入下一个数 if (findTheResult(board, row, column, unit, rowIndex, columnIndex)) { return true; } else { //失败,复位本次的写入结果 board[rowIndex][columnIndex] = '.'; row[rowIndex][k] = false; column[columnIndex][k] = false; unit[(rowIndex/3)*3 + columnIndex/3][k] = false; } } return false; } }
相关文章推荐
- [leetcode] 37. Sudoku Solver 解题报告
- LeetCode - 37. Sudoku Solver
- 个人记录-LeetCode 7.Reverse Integer
- 个人记录-LeetCode 11. Container With Most Water
- 个人记录-LeetCode 10.Regular Expression Matching
- 【LeetCode】37. Sudoku Solver
- 个人记录-LeetCode 15. 3Sum
- 【LeetCode】37. Sudoku Solver 数独求解
- LeetCode 37. Sudoku Solver|DFS算法
- 个人记录-LeetCode 13. Roman to Integer
- Leetcode 36. Valid Sudoku & 37. Sudoku Solver
- [LeetCode] 37. Sudoku Solver
- (Leetcode)37. Sudoku Solver
- 个人记录-LeetCode 6.ZigZag Conversion
- 个人记录-LeetCode 3.Longest Substring Without Repeating Characters
- Leetcode 37. Sudoku Solver
- leetcode 37. Sudoku Solver
- 个人记录-LeetCode 1.Two Sum
- 个人记录-LeetCode 9.Palindrome Number
- 个人记录-LeetCode 14. Longest Common Prefix