LeetCode 037 Sudoku Solver

来源:互联网 发布:禁止上网软件 编辑:程序博客网 时间:2024/06/13 18:19

题目要求编写函数求解数独问题。

这道题目中假设只有一个解。

  • 思路一:
    既然上一题已经做过了判断局面是否合法的问题,那么直接拿过来用。先把所有空位的位置存到一个vector中。然后用回溯法尝试用1~9填写每一个空位,判断是否合法,若合法则继续递归尝试下一个位置。
    这个思路很直接,但是效率也很低。用C++编写后在LeetCode上运行时间为597 ms,击败6.41%。

  • 思路二
    上一个思路中,每次判断是否合法都需要把9x9格子都扫一遍。其实没有必要,用数组维护每行、每列、每3x3格中存在的数字,尝试填数字的时候在数组中判断即可。
    用C++编写后在LeetCode上运行时间为12 ms,大大加快,击败77.36%。

  • 思路三
    上两种思路中的搜索顺序都是按照格子的排列顺序来的,其实我们可以从可以填的数字最少的空位开始搜索,这样可以提前排除掉一些搜索树中的枝叶。在回溯时每次寻找可以填的数字最少的空位。
    用C++编写后在LeetCode上运行时间为4 ms,击败86.98%。

0 0
原创粉丝点击