Menu
CoddyTech

Sudoku Solver

困难回溯python iconjava iconcpp iconc iconjs icon+10

数独棋盘是一个 9 × 9 的网格,分为九个 3 × 3 的方框。解出的棋盘中,每一行、每一列和每个方框都恰好包含一次从 1 到 9 的每个数字。

谜题以 9 个字符串的形式给出,从最上面一行开始,每行一个;. 表示空格。填满所有空格,并以相同的形式返回解出的棋盘。这个棋盘恰好有一个解。

函数

solveSudoku(board: string-array) → string-array
boardstring-array
谜题的 9 行,每个空单元格中都有一个点
返回值string-array
已完成棋盘的 9 行

约束条件

  • board 中有 9 个长度为 9 的字符串。
  • 每个字符都是 . 或数字 1 到 9 中的一个。
  • 给定的数字在每一行、每一列或每个宫格内都不会重复。
  • 棋盘恰好有一个解。

示例

输入
board = ["9.7.....6", "824.3....", "..1..9..2", ".9...2.18", "...4....5", "1325.8...", "...687...", "......8.9", ".4.9...5."]
输出
["957214386", "824736591", "361859742", "495372618", "786491235", "132568974", "519687423", "273145869", "648923157"]
解释
最上面一行 9.7.....6 已经有 9、7 和 6,所以这一行的六个空格要填入 1、2、3、4、5 和 8。列和宫格决定每个数字的位置,这一行最终变成 957214386。
challenge icon

进阶

在杀手数独中,格子组成的笼也必须加起来等于给定的和。你会如何将这条规则加入搜索,并用它尽早剪掉分支?

重置代码
def solveSudoku(board):
    # 在这里编写代码

测试 #1

参数

board = ["9.7.....6", "824.3....", "..1..9..2", ".9...2.18", "...4....5", "1325.8...", "...687...", "......8.9", ".4.9...5."]

预期输出

["957214386", "824736591", "361859742", "495372618", "786491235", "132568974", "519687423", "273145869", "648923157"]