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

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

這篇具有很好參考價(jià)值的文章主要介紹了DFS:深搜+回溯+剪枝解決組合問(wèn)題。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

DFS:深搜+回溯+剪枝解決組合問(wèn)題,遞歸、搜索與回溯算法總結(jié),深度優(yōu)先,剪枝,算法,leetcode,c++

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?創(chuàng)作不易,感謝支持!!!

一、電話號(hào)碼的組合

. - 力扣(LeetCode)

DFS:深搜+回溯+剪枝解決組合問(wèn)題,遞歸、搜索與回溯算法總結(jié),深度優(yōu)先,剪枝,算法,leetcode,c++

class Solution {
public:
      string hash[10]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
      string path;//記錄路徑
      vector<string> ret;//記錄返回值
    vector<string> letterCombinations(string digits) 
    {
        if(digits.size()==0) return ret;
        dfs(digits,0);
        return ret;
    }
    void dfs(string &digits,int pos)
    {
        if(path.size()==digits.size()) {ret.push_back(path);return;}
            for(auto ch:hash[digits[pos]-'0'])//從當(dāng)前位置開(kāi)始遍歷,然后再去下一個(gè)里面找
            {
                path.push_back(ch);
                dfs(digits,pos+1);
                path.pop_back();
            }
    }
};

二、括號(hào)生成

. - 力扣(LeetCode)

DFS:深搜+回溯+剪枝解決組合問(wèn)題,遞歸、搜索與回溯算法總結(jié),深度優(yōu)先,剪枝,算法,leetcode,c++

class Solution {
public:
    vector<string> ret;
    string path;
    int n;
    vector<string> generateParenthesis(int _n) 
    {
      n=_n;
      dfs(0,0);
      return ret;
    }
    void dfs(int open,int close)//open和close記錄上界和下界
    {
        if(path.size()==2*n) {ret.push_back(path);return;}
        if(open<n) 
        {
           path.push_back('(');
           dfs(open+1,close);
           path.pop_back();
        }
        if(close<open)
        {
           path.push_back(')');
           dfs(open,close+1);
           path.pop_back();
        }
    }
};

?三、組合

. - 力扣(LeetCode)

DFS:深搜+回溯+剪枝解決組合問(wèn)題,遞歸、搜索與回溯算法總結(jié),深度優(yōu)先,剪枝,算法,leetcode,c++

class Solution {
public:
    vector<vector<int>> ret;
    vector<int> path;
    int k;//用k全局,可以減少一個(gè)參數(shù)
    int n;//用n全局,可以減少一個(gè)參數(shù)
    vector<vector<int>> combine(int _n, int _k) 
    {
       k=_k;
       n=_n;
       dfs(1);
       return ret;
    }

    void dfs(int pos)
    {
        if(path.size()==k) {ret.push_back(path);return;}
        for(int i=pos;i<=n;++i)
        {
            path.push_back(i);
            dfs(i+1);
            path.pop_back();
        }
    }
};

四、目標(biāo)和

. - 力扣(LeetCode)

DFS:深搜+回溯+剪枝解決組合問(wèn)題,遞歸、搜索與回溯算法總結(jié),深度優(yōu)先,剪枝,算法,leetcode,c++

class Solution {
     int ret=0;//記錄返回結(jié)果
public:
    int findTargetSumWays(vector<int>& nums, int target) 
    {
        dfs(nums,target,0,0);
        return ret;
    }

    void dfs(vector<int>& nums, int target,int index,int sum)
    {
        if(index==nums.size()) 
        {
            if(sum==target)  ++ret;
        }
        //選正數(shù)
        else
        {
        dfs(nums,target,index+1,sum+nums[index]);
        dfs(nums,target,index+1,sum-nums[index]);
        }
    }
    
};

五、組合總和I

. - 力扣(LeetCode)

DFS:深搜+回溯+剪枝解決組合問(wèn)題,遞歸、搜索與回溯算法總結(jié),深度優(yōu)先,剪枝,算法,leetcode,c++

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

    void dfs(vector<int>& candidates,int pos,int target)
    {
     if(target==0){ ret.push_back(path);return;}
     if(target<0) return;
     for(int i=pos;i<candidates.size();++i)//第一層,遍歷每個(gè)數(shù)
      {
        path.push_back(candidates[i]);
        dfs(candidates,i,target-candidates[i]);//要從原先的位置去找
        path.pop_back();
      }
    }
};

DFS:深搜+回溯+剪枝解決組合問(wèn)題,遞歸、搜索與回溯算法總結(jié),深度優(yōu)先,剪枝,算法,leetcode,c++

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

    void dfs(vector<int>& nums,int pos,int target)
    {
     if(target==0){ ret.push_back(path);return;}
     if(target<0||pos==nums.size()) return;
     for(int k=0;k*nums[pos]<=target;++k)//第一層,遍歷每個(gè)數(shù)
      {
        if(k) path.push_back(nums[pos]);
        dfs(nums,pos+1,target-k*nums[pos]);//要從原先的位置去找
      }
      for(int k=1;k*nums[pos]<=target;++k) path.pop_back();//

    }
};

六、組合總和II

. - 力扣(LeetCode)

DFS:深搜+回溯+剪枝解決組合問(wèn)題,遞歸、搜索與回溯算法總結(jié),深度優(yōu)先,剪枝,算法,leetcode,c++

七、組合總和III

. - 力扣(LeetCode)

DFS:深搜+回溯+剪枝解決組合問(wèn)題,遞歸、搜索與回溯算法總結(jié),深度優(yōu)先,剪枝,算法,leetcode,c++

class Solution {
public:
    vector<vector<int>> ret;//記錄組合
    vector<int> path;//記錄路徑
    vector<vector<int>> combinationSum3(int k, int n) { 
        if(n>45) return ret;//剪枝
         dfs(k,n,1);
         return ret;
    }
    void dfs(int k,int n,int pos)
    {
        if(k==0&&n==0) 
        {
            ret.push_back(path);
            return;
        }
        if(n<0||k<0) return;
        for(int i=pos;i<=9;++i)
        {
            path.push_back(i);
            dfs(k-1,n-i,i+1);
            path.pop_back();
        }
    }
};

八、組合總和IV

. - 力扣(LeetCode)

該題和前面是類似的,但是用回溯算法,會(huì)超時(shí)

DFS:深搜+回溯+剪枝解決組合問(wèn)題,遞歸、搜索與回溯算法總結(jié),深度優(yōu)先,剪枝,算法,leetcode,c++

class Solution {
public:
    int combinationSum4(vector<int>& nums, int target) {
        vector<int> dp(target + 1);
        dp[0] = 1;
        for (int i = 1; i <= target; i++) {
            for (int& num : nums) {
                if (num <= i&& dp[i - num] < INT_MAX - dp[i]) 
                {
                    dp[i] += dp[i - num];
                }
            }
        }
        return dp[target];
    }
};

?DFS:深搜+回溯+剪枝解決組合問(wèn)題,遞歸、搜索與回溯算法總結(jié),深度優(yōu)先,剪枝,算法,leetcode,c++文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-848361.html

到了這里,關(guān)于DFS:深搜+回溯+剪枝解決組合問(wèn)題的文章就介紹完了。如果您還想了解更多內(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)文章

  • 遞歸、搜索與回溯算法(專題二:深搜)

    遞歸、搜索與回溯算法(專題二:深搜)

    往期文章(希望小伙伴們?cè)诳催@篇文章之前,看一下往期文章) (1)遞歸、搜索與回溯算法(專題零:解釋回溯算法中涉及到的名詞)【回溯算法入門必看】-CSDN博客 (2)遞歸、搜索與回溯算法(專題一:遞歸)-CSDN博客 ?深搜是實(shí)現(xiàn)遞歸的一種方式,接下來(lái)我們之間從題

    2024年01月20日
    瀏覽(17)
  • 專題二:二叉樹(shù)的深搜【遞歸、搜索、回溯】

    專題二:二叉樹(shù)的深搜【遞歸、搜索、回溯】

    深度優(yōu)先遍歷 (DFS,全稱為DepthFirstTraversal),是我們樹(shù)或者圖這樣的數(shù)據(jù)結(jié)構(gòu)中常用的?種遍歷算法。這個(gè)算法會(huì)盡可能深的搜索樹(shù)或者圖的分?,直到?條路徑上的所有節(jié)點(diǎn)都被遍歷完畢,然后再回溯到上?層,繼續(xù)找?條路遍歷。 在?叉樹(shù)中,常?的深度優(yōu)先遍歷為:

    2024年02月07日
    瀏覽(18)
  • DFS(基礎(chǔ),回溯,剪枝,記憶化)搜索

    DFS(基礎(chǔ),回溯,剪枝,記憶化)搜索

    DFS(深度優(yōu)先搜索) 基于遞歸求解問(wèn)題,而針對(duì)搜索的過(guò)程 對(duì)于問(wèn)題的介入狀態(tài)叫初始狀態(tài),要求的狀態(tài)叫目標(biāo)狀態(tài) 這里的搜索就是對(duì)實(shí)時(shí)產(chǎn)生的狀態(tài)進(jìn)行分析檢測(cè),直到得到一個(gè)目標(biāo)狀態(tài)或符合要求的最佳狀態(tài)為止。對(duì)于實(shí)時(shí)產(chǎn)生新的狀態(tài)的過(guò)程叫擴(kuò)展 搜索的要點(diǎn): 1.選定初

    2024年04月12日
    瀏覽(16)
  • 每日OJ題_DFS回溯剪枝⑨_力扣39. 組合總和(兩種思路)

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

    目錄 力扣39. 組合總和 解析代碼1 解析代碼2 39. 組合總和 LCR 081. 組合總和 難度 中等 給你一個(gè)? 無(wú)重復(fù)元素 ?的整數(shù)數(shù)組? candidates ?和一個(gè)目標(biāo)整數(shù)? target ?,找出? candidates ?中可以使數(shù)字和為目標(biāo)數(shù)? target ?的 所有 ? 不同組合 ?,并以列表形式返回。你可以按? 任意順序

    2024年04月28日
    瀏覽(22)
  • 【算法】回溯:與遞歸,dfs的同質(zhì)與分別,剪枝與恢復(fù)現(xiàn)場(chǎng)的詳細(xì)理解,n皇后的回溯解法及算法復(fù)雜度分析。

    【算法】回溯:與遞歸,dfs的同質(zhì)與分別,剪枝與恢復(fù)現(xiàn)場(chǎng)的詳細(xì)理解,n皇后的回溯解法及算法復(fù)雜度分析。

    目錄 ?編輯 1.什么是回溯 2.關(guān)于剪枝 3.關(guān)于恢復(fù)現(xiàn)場(chǎng) 4.題目:二叉樹(shù)的所有路徑(凸顯恢復(fù)現(xiàn)場(chǎng):切實(shí)感受回溯與深搜) 問(wèn)題分析 ①函數(shù)設(shè)置為:void Dfs(root) ②函數(shù)設(shè)置為:void Dfs(root,path) 解題思想:使?深度優(yōu)先遍歷(DFS)求解。 代碼實(shí)現(xiàn) 5.N后問(wèn)題 問(wèn)題分析 4皇后的放置

    2024年04月16日
    瀏覽(20)
  • 窮舉&&深搜&&暴搜&&回溯&&剪枝(2)

    窮舉&&深搜&&暴搜&&回溯&&剪枝(2)

    一)電話號(hào)碼的字母組合 17. 電話號(hào)碼的字母組合 - 力扣(LeetCode) 1)畫(huà)出決策樹(shù):只是需要對(duì)最終的決策樹(shù)做一個(gè)深度優(yōu)先遍歷,在葉子節(jié)點(diǎn)收集結(jié)果即可 把圖畫(huà)出來(lái),知道每一層在干什么,代碼就能寫(xiě)出來(lái)了 ?2)定義全局變量: 1)定義一個(gè)哈希表來(lái)處理數(shù)字和字符串的映射關(guān)系

    2024年02月14日
    瀏覽(22)
  • 窮舉&&深搜&&暴搜&&回溯&&剪枝(3)

    窮舉&&深搜&&暴搜&&回溯&&剪枝(3)

    一)字母大小寫(xiě)全排列 784. 字母大小寫(xiě)全排列 - 力扣(LeetCode) 1)從每一個(gè)字符開(kāi)始進(jìn)行枚舉,如果枚舉的是一個(gè)數(shù)字字符,直接忽視 如果是字母的話,進(jìn)行選擇是變還是不變 2)當(dāng)進(jìn)行遍歷到葉子結(jié)點(diǎn)的時(shí)候,直接將結(jié)果存放到ret里面即可 3)相對(duì)于是對(duì)于這個(gè)決策樹(shù)做一個(gè)深度

    2024年02月14日
    瀏覽(37)
  • 窮舉&&深搜&&暴搜&&回溯&&剪枝(4)

    窮舉&&深搜&&暴搜&&回溯&&剪枝(4)

    一)單詞搜索: 直接在矩陣中依次找到特定字符串 79. 單詞搜索 - 力扣(LeetCode) 畫(huà)出決策樹(shù),只需要做一個(gè)深度優(yōu)先遍歷: 1)設(shè)計(jì)dfs函數(shù):只需要關(guān)心每一層在做什么即可,從這個(gè)節(jié)點(diǎn)開(kāi)始,開(kāi)始去嘗試匹配字符串的下一個(gè)字符,就是從某一個(gè)位置的字符開(kāi)始,上下左右下標(biāo)看看

    2024年02月09日
    瀏覽(16)
  • 【leetcode】深搜、暴搜、回溯、剪枝(C++)3

    【leetcode】深搜、暴搜、回溯、剪枝(C++)3

    leetcode鏈接 leetcode鏈接 leetcode鏈接 leetcode鏈接

    2024年02月22日
    瀏覽(17)
  • 【leetcode】深搜、暴搜、回溯、剪枝(C++)2

    【leetcode】深搜、暴搜、回溯、剪枝(C++)2

    leetcode鏈接 leetcode鏈接 leetcode鏈接 全局變量的超時(shí)代碼: 原因在于nums的長(zhǎng)度最長(zhǎng)有20,其2^20次方太大了。但是leetcode居然通過(guò)了。 path作為參數(shù)的正確代碼: leetcode鏈接 解法一: 解法二: 解法一: 解法二: leetcode鏈接 leetcode鏈接 leetcode鏈接 這里我們著重在剪枝方面上面的

    2024年02月20日
    瀏覽(17)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包