[LeetCode] 039. Combination Sum (Medium) (C++)

來源:互聯網
上載者:User

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

039. Combination Sum (Medium) 連結

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

給出一些正整數集合,以及一個目標數,從集合中選擇一些數使得它們的和等於目標數,可以重複選擇集合裡的數。
得到的解的集合不能有重複。 分析

暴力搜尋過去是可以的,先排好序,然後用 DFS,每次有兩種選擇,一是選中當前的數然後遞迴當前數,二是不選當前數直接遞迴下個數。
這題用來理解 DFS 是很不錯的。 代碼 (C++)

/**  Author:      illuz <iilluzen[at]gmail.com>*  File:        AC_dfs_n!.cpp*  Create Date: 2015-01-01 10:45:58*  Descripton:  dfs, choose or not choose*/#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 (sz <= cur || rest < 0)            return;        if (rest == 0) {            ans.push_back(single);            return;        }        // choose cur        single.push_back(candi[cur]);        dfs(ans, single, candi, cur, rest - candi[cur]);        single.pop_back();        // don't choose cur        dfs(ans, single, candi, cur + 1, rest);    }public:    vector<vector<int> > combinationSum(vector<int> &candidates, int target) {        vector<vector<int> > ans;        vector<int> single;        sort(candidates.begin(), candidates.end());        dfs(ans, single, candidates, 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.combinationSum(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.