二哥的 leetcode 刷题笔记:解数独
鲁迅说过:世界就是一个巨大的草台班子,那就让我们先从二哥的 LeetCode 刷题笔记开始吧!
题意
编写一个程序,通过填充空格来解决数独问题。
数独的解法需遵循如下规则:
- 数字 1-9 在每一行只能出现一次。
- 数字 1-9 在每一列只能出现一次。
- 数字 1-9 在每一个以粗实线分隔的 3x3 九宫格内只能出现一次。
数独的部分空格内已填入了数字,空白格用 '.' 表示。
难度
困难
示例
输入:board = [
["5","3",".",".","7",".",".",".","."],
["6",".",".","1","9","5",".",".","."],
[".","9","8",".",".",".",".","6","."],
["8",".",".",".","6",".",".",".","3"],
["4",".",".","8",".","3",".",".","1"],
["7",".",".",".","2",".",".",".","6"],
[".","6",".",".",".",".","2","8","."],
[".",".",".","4","1","9",".",".","5"],
[".",".",".",".","8",".",".","7","9"]]
输出:[
["5","3","4","6","7","8","9","1","2"],
["6","7","2","1","9","5","3","4","8"],
["1","9","8","3","4","2","5","6","7"],
["8","5","9","7","6","1","4","2","3"],
["4","2","6","8","5","3","7","9","1"],
["7","1","3","9","2","4","8","5","6"],
["9","6","1","5","3","7","2","8","4"],
["2","8","7","4","1","9","6","3","5"],
["3","4","5","2","8","6","1","7","9"]]
解释:输入的数独如上图所示,唯一有效的解决方案如下所示:
分析
解数独,通常会出现在一些趣味杂志或者团建活动上,最朴素最暴力的解法就是去猜一个数,然后判断其符不符合要求,符合就去猜下一个数。
计算机在面对这类问题的时候,因为处理速度比人脑快得多多多多,所以可以挨个枚举每个 “坑” 应该填写的数字,然后再检验一下符不符合数独的要求,就可以得出答案了。
题目要求保证唯一解,所以我们需要记录每一个 . 的位置(也就是空白格的位置),然后逐个枚举合法的数字,确定与当前的每一行、每一列、每个九宫格都没有冲突。
如果没有冲突,就去枚举下一个,如果有冲突的话,就表示之前猜想的数字有问题,我们可以直接回溯到之前的...
回复