1. 程式人生 > >LeetCode—77. Combinations_遞迴暴力搜尋_dfs_深度優先

LeetCode—77. Combinations_遞迴暴力搜尋_dfs_深度優先

題目是這樣的:

首先說明這是一個經典的遞迴窮舉搜尋問題——dfs(深度優先搜尋)題目給定N在從1...........n中存在K個數組能夠排列,就是從n中選擇k個數字進行排列。

首先老套路定義一個全域性變數來接受所得的答案,然後在函式中定義一個path(所有的路徑方案),然後就是從第一個數字開始進行遞迴函式。下面是我的程式碼

class Solution {
    
    
    vector<vector<int>> ans;
    
public:
    vector<vector<int>> combine(int n, int k) {
        
        vector<int> path;
        dfs(path,1,n,k);
        
        return ans;
        
    }
    
    void dfs(vector<int> path,int start,int n,int k)
    {
        if(!k)
        {
            ans.push_back(path);
            return;
        }
        
        for(int i=start;i<=n;i++)
        {
            path.push_back(i);
            dfs(path,i+1,n,k-1);
            path.pop_back();
        }
        
    }
    
    
};

在這個遞迴的函式中,首先定義一個遞迴函式的出口,就是把所有方案壓入到ans容器中。然後就是列舉的過程首先以第一個元素來開始列舉,壓入容器,然後開始遞迴下一個元素,在這個地方path的作用就是實時更新內部的值,保證內部的方案就是即時的方案,遞迴結束後清除剛剛遞迴所壓入的值,保持實時更新path方案內部的值。

 

我們一起加油!!