问题描述:解一个 9×9 的数独问题,其中部分格子已经填入数字,需要填满所有空格,且每行、每列和每个 3×3 子宫格中数字 1 到 9 不能重复 实现步骤 从左上角开始,尝试填入数字 1 到 9 检查当前填入数字是否符合数独规则 如果符合规则,则继续填下一个空格 如果不符合或所有数字都尝试过,则回退到上一步,尝试其他数字 分析 时间复杂度: O(9^{n^2}),因为需要尝试所有可能的填入方式,其中 n 是数独的大小(n=9) 空间复杂度: 需要存储棋盘,空间复杂度是 O(n^2) 实现代码 function solveSudoku(board) { function isValid(board, row, col, num) { for (let i = 0; i < 9; i++) { if (board[row][i] == num || board[i][col] == num || board[Math.floor(row / 3) * 3 + Math.floor(i / 3)][Math.floor(col / 3) * 3 + i % 3] == num) { return false; } } return true; } function backtrack(board) { for (let row = 0; row < 9; row++) { for (let col = 0; col < 9; col++) { if (board[row][col] == '.') { for (let num = 1; num <= 9; num++) { if (isValid(board, row, col, num)) { board[row][col] = num.toString(); if (backtrack(board)) { return true; } else { board[row][col] = '.'; } } } return false; } } } return true; } backtrack(board); return board; } let 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'] ]; console.log(solveSudoku(board)); // 输出: 数独的解