今天在刷leetcode的时候遇见一道难度为hard的题目,大意是解出给定的数独。感觉比较有应用的价值,便尝试着去做了一下。
首先明确数独问题必有唯一可行解。求数独有效解的基本思想是利用回溯法:从挖空的地方开始,从1到9逐个地去尝试可能的解。如果当前行、列以及所在大方格没有出现重复,则解被暂时接受,并开始尝试以相同的方式求解下一个空格。如果1到9均不成为有效解,则后退至上一个空格,试探其下一个可能值。以下面一个简单的数独为例:
搜索空格。在(1,3)处出现空格。从“1”开始试探,发现“2”符合要求,将其暂时填入,并搜索下一个空格(1,4)。发现符合条件的数为“6”,将其填入空格。如下图所示: