leetcode 37. 解数独

2023.7.26

 

leetcode 37. 解数独_第1张图片

         这题也是回溯经典应用题,和之前n皇后问题的最大区别是,之前n皇后问题每行只需要放一个皇后,本质上属于一维的,即回溯的for循环只有一层。此时是一个二维的回溯递归,for循环有两层。

        本题回溯函数的返回值为bool类型,原因是本题我们只需要返回一个解集即可,(即一个棋盘),遇到合适的棋盘直接返回就行。而之前的组合、分割、排列等问题都需要返回所有解集情况。

        和n皇后问题一样,需要设一个valid函数判断此时的棋盘合不合规矩。

下面看代码:

class Solution {
public:
    bool valid(int row, int col, char value, vector>& board)
    {
        //判断行
        for(int i=0;i<9;i++)
        {
            if(board[row][i] == value) return false;
        }
        //判断列
        for(int j=0;j<9;j++)
        {
            if(board[j][col] == value) return false; 
        }
        //判断斜线
        int start_row = row / 3 * 3;
        int start_col = col / 3 * 3;
        for(int i=start_row; i>& board)
    {
        for(int i=0; i>& board) {
        backtrack(board);
    }
};

        时间复杂度:O(9^m),m为 . 的个数

        空间复杂度:   O(n^2) 

你可能感兴趣的:(leetcode专栏,leetcode,算法,职场和发展,c++,数据结构)