LeetCode Sudoku Solver
来源:互联网 发布:淘宝店铺名搜索不到 编辑:程序博客网 时间:2024/05/19 00:43
LeetCode解题之Sudoku Solver
原题
通过程序来解决数独问题。
注意点:
- 有且只有唯一解
例子:
输入:
输出:
解题思路
这次不是像 Valid Sudoku 一样只需要判断数独是否合法,而是要给出确切的解,但还是可以复用一下判断是否符合数独规则的方法。采用递归来解决,递归的终止条件有:
- 遍历完所有的格子
- 违反数独的规则
遍历每个格子,如果已经有数字,则继续递归下一个位置;如果没有,就放入一个数字并检查是否符合规则,如果符合则继续递归,如果递归失败,则要进行回溯,将数字改为空格,继续尝试别的数字。直到放入一个合适的值后再去填下一个位置。
AC源码
class Solution(object): def solveSudoku(self, board): """ :type board: List[List[str]] :rtype: void Do not return anything, modify board in-place instead. """ for row in range(9): board[row] = list(board[row]) self.recursive(0, 0, board) for row in range(9): board[row] = "".join(board[row]) def recursive(self, i, j, board): if j >= 9: return self.recursive(i + 1, 0, board) if i == 9: return True if board[i][j] == ".": for num in range(1, 10): num_str = str(num) if all([board[i][col] != num_str for col in range(9)]) and all([board[row][j] != num_str for row in range(9)]) and all( [board[i // 3 * 3 + count // 3][j // 3 * 3 + count % 3] != num_str for count in range(9)]): board[i][j] = num_str if not self.recursive(i, j + 1, board): board[i][j] = "." else: return True else: return self.recursive(i, j + 1, board) return Falseif __name__ == "__main__": sudoku = ["..9748...", "7........", ".2.1.9...", "..7...24.", ".64.1.59.", ".98...3..", "...8.3.2.", "........6", "...2759.."] Solution().solveSudoku(sudoku) assert sudoku == ['519748632', '783652419', '426139875', '357986241', '264317598', '198524367', '975863124', '832491756', '641275983']
欢迎查看我的Github (https://github.com/gavinfish/LeetCode-Python) 来获得相关源码。
0 0
- 【LeetCode】Valid Sudoku && Sudoku Solver
- [Leetcode]Sudoku Solver&&Valid Sudoku
- leetcode Valid Sudoku & Sudoku Solver
- Leetcode 37 Sudoku Solver
- [Leetcode] Sudoku Solver
- Leetcode 37: Sudoku solver
- LeetCode Sudoku Solver
- [LeetCode]Sudoku Solver
- Leetcode Sudoku Solver
- LeetCode-Sudoku Solver
- LeetCode - Sudoku Solver
- LeetCode:Sudoku Solver
- 【leetcode】Sudoku Solver
- Leetcode: Sudoku Solver
- leetcode Sudoku Solver
- LeetCode | Sudoku Solver
- LeetCode Sudoku Solver
- [Leetcode] Sudoku Solver (Java)
- Java回调的简单理解
- tomcat部署web工程
- Swift内存管理(ARC)之循环引用
- Android中monkey测试
- javascript(JS) 中的alert出来的消息怎么进行国际化
- LeetCode Sudoku Solver
- 并发过高导致库存买超情况
- linux下性能监控shell脚本实现系列一(服务器整体性能监控)
- 微信平台开发获取微信用户的OPENID
- SpringMVC+Spring3.0+Mybatise+Extjs4.0+Json 包冲突
- C#中null和""的区别
- SVN搭建方法
- 图的遍历
- 当滚动条的位置处于距顶部100像素以下时,跳转链接出现,否则消失