深度优先问题
参考组合总数I、组合总数II等题目
深度优先的函数入口参数为 当前index 当前状态(多个)
举例:
def combinationSum(self, candidates, target):
"""
:type candidates: List[int]
:type target: int
:rtype: List[List[int]]
"""
n = len(candidates)
ans = []
def dfs(dix,sumt,tmp):
if sumt> target:
return
if sumt== target:
ans.append(tmp)
return
for i in range(dix,n):
dfs(i,sumt + candidates[i], tmp.append(candidates[i]))
dfs(0,0,[])
return ans
lass Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
vector<vector<int>> res;
vector<int> path;
dfs(candidates, path, res, target, 0, 0);
return res;
}
void dfs(vector<int> &candidates, vector<int> &path, vector<vector<int>> &res, int target, int pre_sum, int idx){
if (pre_sum > target){
return;
}else if (pre_sum == target){
res.push_back(path);
return;
}
for (int i = idx; i < candidates.size(); i++){
path.push_back(candidates[i]);
dfs(candidates, path, res, target, pre_sum+candidates[i], i);
path.pop_back();
}
}
};
不同的方案写的细节:关于push/pop
因为python中没有使用push而是使用直接+的方式,天然避免了pop