当前位置:首页 > 编程笔记 > 正文
已解决

leetcode_39 组合总和

来自网友在路上 166866提问 提问时间:2023-10-28 00:08:55阅读次数: 66

最佳答案 问答题库668位专家为你答疑解惑

1. 题意

给定一个数组,和一个目标值;求得所有数组中所有和为目标值的元素序列。

组合总数

2. 题解

回溯列举每一个可能的序列,注意去重。

2.1 我的解法
class Solution {
public:void gen(vector<vector<int>> &ans,const vector<int> &candidates, vector<int> &seq, int target){if (target == 0) {ans.push_back(seq);return ;}if ( target < 0)return ;int sz = candidates.size();for ( int i = 0; i < sz; ++i) {if ( !seq.empty() &&candidates[i] < seq[seq.size() - 1])continue;seq.push_back(candidates[i]);gen(ans, candidates, seq, target - candidates[i]);seq.pop_back();}}vector<vector<int>> combinationSum(vector<int>& candidates, int target) {vector<vector<int>> ans;vector<int> one;sort(candidates.begin(), candidates.end());gen(ans, candidates, one, target);return ans;}
};
2.2 另一种可能
class Solution {
public:void gen(vector<vector<int>> &ans,const vector<int> &candidates, vector<int> &seq, int idx, int target){if (target == 0) {ans.push_back(seq);return ;}if ( target < 0)return ;int sz = candidates.size();for ( int i = idx; i < sz; ++i) {seq.push_back(candidates[i]);gen(ans, candidates, seq, i, target - candidates[i]);seq.pop_back();}}vector<vector<int>> combinationSum(vector<int>& candidates, int target) {vector<vector<int>> ans;vector<int> one;sort(candidates.begin(), candidates.end());gen(ans, candidates, one, 0, target);return ans;}
};
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"leetcode_39 组合总和":http://eshow365.cn/6-26405-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!