[leetcode] 040. Combination Sum II (Medium) (C++)

來源:互聯網
上載者:User

索引:[LeetCode] Leetcode 題解索引 (C++/Java/Python/Sql)
Github: https://github.com/illuz/leetcode

040. Combination Sum II (Medium) 連結

題目:https://leetcode.com/problems/combination-sum-ii/
代碼(github):https://github.com/illuz/leetcode 題意

跟 039 一樣(給出一些正整數集合,以及一個目標數,從集合中選擇一些數使得它們的和等於目標數),不過不能選重複的數。 分析

同樣暴力 DFS,不過要考慮重複會複雜點。
還要考慮解集裡不能有相同的解。 代碼

/**  Author:      illuz <iilluzen[at]gmail.com>*  File:        AC_dfs_n!.cpp*  Create Date: 2015-01-01 11:35:04*  Descripton:  just as the version I*/#include <bits/stdc++.h>using namespace std;const int N = 0;class Solution {private:    void dfs(vector<vector<int> > &ans, vector<int> &single,            vector<int> &candi, int cur, int rest) {        int sz = candi.size();        if (rest == 0) {            // to avoid [[1,1,1], 2]            if (!single.empty() && cur < sz && single[single.size() - 1] == candi[cur])                return;            ans.push_back(single);            return;        }        if (sz <= cur || rest < 0)            return;        // choose cur        single.push_back(candi[cur]);        dfs(ans, single, candi, cur + 1, rest - candi[cur]);        single.pop_back();        // don't choose cur        // not contain duplicate combinations        if (!single.empty() && single[single.size() - 1] == candi[cur])            return;        dfs(ans, single, candi, cur + 1, rest);    }public:    vector<vector<int> > combinationSum2(vector<int> &num, int target) {        vector<vector<int> > ans;        vector<int> single;        sort(num.begin(), num.end());        dfs(ans, single, num, 0, target);        return ans;    }};int main() {    int tar;    int n;    Solution s;    cin >> n >> tar;    vector<int> v(n);    for (int i = 0; i < n; i++)        cin >> v[i];    vector<vector<int> > res = s.combinationSum2(v, tar);    for (auto &i : res) {        for (auto &j : i)            cout << j << ' ';        puts("");    }    return 0;}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.