LeetCode—77. Combinations_遞迴暴力搜尋_dfs_深度優先
阿新 • • 發佈:2018-11-10
題目是這樣的:
首先說明這是一個經典的遞迴窮舉搜尋問題——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方案內部的值。
我們一起加油!!