国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

每日OJ題_DFS回溯剪枝⑨_力扣39. 組合總和(兩種思路)

這篇具有很好參考價(jià)值的文章主要介紹了每日OJ題_DFS回溯剪枝⑨_力扣39. 組合總和(兩種思路)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

力扣39. 組合總和

解析代碼1

解析代碼2


力扣39. 組合總和

39. 組合總和

LCR 081. 組合總和

難度 中等

給你一個(gè)?無(wú)重復(fù)元素?的整數(shù)數(shù)組?candidates?和一個(gè)目標(biāo)整數(shù)?target?,找出?candidates?中可以使數(shù)字和為目標(biāo)數(shù)?target?的 所有?不同組合?,并以列表形式返回。你可以按?任意順序?返回這些組合。

candidates?中的?同一個(gè)?數(shù)字可以?無(wú)限制重復(fù)被選取?。如果至少一個(gè)數(shù)字的被選數(shù)量不同,則兩種組合是不同的。?

對(duì)于給定的輸入,保證和為?target?的不同組合數(shù)少于?150?個(gè)。

示例?1:

輸入:candidates = [2,3,6,7], target = 7

輸出:[[2,2,3],[7]]
解釋:
2 和 3 可以形成一組候選,2 + 2 + 3 = 7 。注意 2 可以使用多次。
7 也是一個(gè)候選, 7 = 7 。
僅有這兩種組合。

示例?2:

輸入: candidates = [2,3,5], target = 8
輸出: [[2,2,2,2],[2,3,3],[3,5]]

示例 3:

輸入: candidates = [2], target = 1
輸出: []

提示:

  • 1 <= candidates.length <= 30
  • 2 <= candidates[i] <= 40
  • candidates?的所有元素?互不相同
  • 1 <= target <= 40
class Solution {
public:
    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
        
    }
};

解析代碼1

因此在選擇當(dāng)前元素并向下傳遞下標(biāo)時(shí),應(yīng)該直接傳遞當(dāng)前元素下標(biāo)。

此題算是組合總和1,后面還有組合總和2、3、4,可以自己完成。

????????candidates 的所有元素互不相同,因此我們?cè)谶f歸狀態(tài)時(shí)只需要對(duì)每個(gè)元素進(jìn)行如下判斷:

  1. 跳過(guò),對(duì)下一個(gè)元素進(jìn)行判斷;
  2. 將其添加至當(dāng)前狀態(tài)中,我們?cè)谶x擇添加當(dāng)前元素時(shí),之后仍可以繼續(xù)選擇當(dāng)前元素(可以重復(fù)選擇同一元素)。

因此在選擇當(dāng)前元素并向下傳遞下標(biāo)時(shí),應(yīng)該直接傳遞當(dāng)前元素下標(biāo)。

class Solution {
    int _target;
    vector<int> path;
    vector<vector<int>> ret;

public:
    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
        _target = target;
        dfs(candidates, 0, 0);
        return ret;
    }

    void dfs(vector<int>& candidates, int pos, int sum)
    {
        if(sum > _target)
            return;
        if(sum == _target)
        {
            ret.push_back(path);
            return;
        }

        for(int i = pos; i < candidates.size(); ++i)
        {
            path.push_back(candidates[i]);
            dfs(candidates, i, sum + candidates[i]);
            path.pop_back();
        }
    }
};

每日OJ題_DFS回溯剪枝⑨_力扣39. 組合總和(兩種思路),每日OJ題(C++_力扣_??停?深度優(yōu)先,剪枝,leetcode,算法,c++


解析代碼2

還可以換一個(gè)思路:如

示例?1:

輸入: candidates = [2,3,6,7], target = 7
輸出: [[7],[2,2,3]]

從選0個(gè)2開(kāi)始,選1、2、3、4...個(gè)2,直到sum >= target。

然后在上面選2的個(gè)數(shù)的基礎(chǔ)上開(kāi)始選3...,直到選完數(shù)組的數(shù)。所有情況枚舉完再恢復(fù)現(xiàn)場(chǎng)。

class Solution {
    int _target;
    vector<int> path;
    vector<vector<int>> ret;

public:
    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
        _target = target;
        dfs(candidates, 0, 0);
        return ret;
    }

    void dfs(vector<int>& candidates, int pos, int sum)
    {
        if(sum == _target)
        {
            ret.push_back(path);
            return;
        }
        if(sum > _target || pos == candidates.size()) // 下面沒(méi)判斷pos這就要判斷
            return;

        for (int k = 0; k * candidates[pos] + sum <= _target; ++k) // 枚舉個(gè)數(shù)
        {
            if (k != 0)
                path.push_back(candidates[pos]);
            dfs(candidates, pos + 1, sum + k * candidates[pos]);
        }
        for (int k = 1; k * candidates[pos] + sum <= _target; ++k) // 恢復(fù)現(xiàn)場(chǎng)
        {
            path.pop_back();
        }
    }
};

每日OJ題_DFS回溯剪枝⑨_力扣39. 組合總和(兩種思路),每日OJ題(C++_力扣_??停?深度優(yōu)先,剪枝,leetcode,算法,c++文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-861035.html

到了這里,關(guān)于每日OJ題_DFS回溯剪枝⑨_力扣39. 組合總和(兩種思路)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 組合(力扣)dfs + 回溯 + 剪枝 JAVA

    組合(力扣)dfs + 回溯 + 剪枝 JAVA

    給定兩個(gè)整數(shù) n 和 k,返回范圍 [1, n] 中所有可能的 k 個(gè)數(shù)的組合。 你可以按 任何順序 返回答案。 示例 1: 輸入:n = 4, k = 2 輸出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 示例 2: 輸入:n = 1, k = 1 輸出:[[1]] 提示: 1 = n = 20 1 = k = n 解題思路: 1.每個(gè)元素有選與不選兩種情況,

    2024年02月16日
    瀏覽(17)
  • 每日OJ題_二叉樹(shù)dfs③_力扣814. 二叉樹(shù)剪枝

    每日OJ題_二叉樹(shù)dfs③_力扣814. 二叉樹(shù)剪枝

    目錄 力扣814. 二叉樹(shù)剪枝 解析代碼 814. 二叉樹(shù)剪枝 難度 中等 給你二叉樹(shù)的根結(jié)點(diǎn)? root ?,此外樹(shù)的每個(gè)結(jié)點(diǎn)的值要么是? 0 ?,要么是? 1 ?。 返回移除了所有不包含? 1 ?的子樹(shù)的原二叉樹(shù)。 節(jié)點(diǎn)? node ?的子樹(shù)為? node ?本身加上所有? node ?的后代。 示例 1: 示例 2: 示

    2024年02月22日
    瀏覽(15)
  • LeetCode算法題解(回溯)|39. 組合總和、40. 組合總和 II、131. 分割回文串

    題目鏈接:39. 組合總和 題目描述: 給你一個(gè)? 無(wú)重復(fù)元素 ?的整數(shù)數(shù)組? candidates ?和一個(gè)目標(biāo)整數(shù)? target ?,找出? candidates ?中可以使數(shù)字和為目標(biāo)數(shù)? target ?的 所有 ? 不同組合 ?,并以列表形式返回。你可以按? 任意順序 ?返回這些組合。 candidates ?中的? 同一個(gè) ?數(shù)

    2024年02月05日
    瀏覽(26)
  • LeetCode刷題13:回溯+剪枝解決216.組合總和 III

    LeetCode刷題13:回溯+剪枝解決216.組合總和 III

    找出所有相加之和為? n ? 的? k ? 個(gè)數(shù)的組合,且滿足下列條件: 只使用數(shù)字1到9 每個(gè)數(shù)字? 最多使用一次 ? 返回? 所有可能的有效組合的列表 ?。該列表不能包含相同的組合兩次,組合可以以任何順序返回。 示例 1: 輸入: k = 3, n = 7 輸出: [[1,2,4]] 解釋: 1 + 2 + 4 = 7 沒(méi)有其他

    2024年02月02日
    瀏覽(18)
  • DFS:深搜+回溯+剪枝解決組合問(wèn)題

    DFS:深搜+回溯+剪枝解決組合問(wèn)題

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?創(chuàng)作不易,感謝支持!!! . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) . - 力扣(LeetCode) 該題和前面是類似的,但是用回溯算法,會(huì)超

    2024年04月12日
    瀏覽(21)
  • 【Leetcode60天帶刷】day27回溯算法——39. 組合總和,40.組合總和II,131.分割回文串

    【Leetcode60天帶刷】day27回溯算法——39. 組合總和,40.組合總和II,131.分割回文串

    ? 39. 組合總和 給你一個(gè)? 無(wú)重復(fù)元素 ?的整數(shù)數(shù)組? candidates ?和一個(gè)目標(biāo)整數(shù)? target ?,找出? candidates ?中可以使數(shù)字和為目標(biāo)數(shù)? target ?的 所有 ? 不同組合 ?,并以列表形式返回。你可以按? 任意順序 ?返回這些組合。 candidates ?中的? 同一個(gè) ?數(shù)字可以? 無(wú)限制重復(fù)

    2024年02月11日
    瀏覽(24)
  • 力扣39. 組合總和

    思路: 定義遞歸函數(shù) dfs(candidates, target, idx),表示當(dāng)前 candidates 在 idx 位,還剩 target 需要組合; 遞歸終止條件: target = 0; target == 0 時(shí),將該組合存入結(jié)果數(shù)組; candidates 元素已經(jīng)用完,idx = candidates.size(); 在當(dāng)前函數(shù)中,可以: 跳過(guò) candidates[idx] 元素進(jìn)行組合,即 dfs(ca

    2024年01月18日
    瀏覽(19)
  • 【力扣】77. 組合 <回溯、回溯剪枝>

    【力扣】77. 組合 <回溯、回溯剪枝>

    給定兩個(gè)整數(shù) n 和 k,返回范圍 [1, n] 中所有可能的 k 個(gè)數(shù)的組合。你可以按任何順序返回答案。 示例 1: 輸入:n = 4, k = 2 輸出: 示例 2: 輸入:n = 1, k = 1 輸出: 提示: 1 = n = 20 1 = k = n 暴力思考:k 等于多少就是多少層循環(huán)。 回溯 回溯法解決的問(wèn)題都可以抽象為樹(shù)形結(jié)構(gòu)

    2024年02月12日
    瀏覽(25)
  • LeetCode(力扣)39. 組合總和Python

    LeetCode(力扣)39. 組合總和Python

    https://leetcode.cn/problems/combination-sum/description/

    2024年02月09日
    瀏覽(16)
  • C++力扣題目39--組合總和

    C++力扣題目39--組合總和

    給你一個(gè)? 無(wú)重復(fù)元素 ?的整數(shù)數(shù)組? candidates ?和一個(gè)目標(biāo)整數(shù)? target ?,找出? candidates ?中可以使數(shù)字和為目標(biāo)數(shù)? target ?的 所有 ? 不同組合 ?,并以列表形式返回。你可以按? 任意順序 ?返回這些組合。 candidates ?中的? 同一個(gè) ?數(shù)字可以? 無(wú)限制重復(fù)被選取 ?。如果

    2024年01月17日
    瀏覽(21)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包