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

DAY25:回溯算法組合題216、17

這篇具有很好參考價值的文章主要介紹了DAY25:回溯算法組合題216、17。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Leetcode: 216 組合總和III

經(jīng)過了昨天組合的題目的學(xué)習(xí),這道題比較簡單,套用之前的模板就可以

基本思路

  • 終止條件,遇到向量的個數(shù)一樣,并且sum等于n的時候終止。
  • 輸入變量,n,k,還有起始的idx和基于當(dāng)前元素之和的sum
  • 邏輯就是,按照循環(huán)遞歸下去,注意要對sum值進行回溯。

時間復(fù)雜度O(n * 2^n)

空間復(fù)雜度O(N)

class Solution {
private:
    vector<vector<int>> result;
    vector<int> vec;
    void traceback(int k, int n, int idx, int sum){
        if(vec.size() == k && sum == n){
            result.push_back(vec);
            return;
        }
        for(int i = idx; i <= 9; i++){
            vec.push_back(i);
            sum += i;//計算當(dāng)前元素之和
            traceback(k, n, i+1, sum);//進行遞歸
            sum -= i;//注意sum值的回溯
            vec.pop_back();
        }
    }
public:
    vector<vector<int>> combinationSum3(int k, int n) {
        traceback(k, n, 1, 0);
        return result;
    }
};

減枝優(yōu)化

1、每個數(shù)值的取值范圍為1-9,與上題一樣的剪枝操作。2、當(dāng)所有元素之和已經(jīng)大于n的時候后續(xù)就不需要進行遞歸了。

for (int i = startIndex; i <= 9 - (k - path.size()) + 1; i++) { // 剪枝
    sum += i; // 處理
    path.push_back(i); // 處理
    if (sum > targetSum) { // 剪枝操作
        sum -= i; // 剪枝之前先把回溯做了
        path.pop_back(); // 剪枝之前先把回溯做了
        return;
    }
    backtracking(targetSum, k, sum, i + 1); // 注意i+1調(diào)整startIndex
    sum -= i; // 回溯
    path.pop_back(); // 回溯
}

Leetcode: 17 電話號碼的字母組合

字母和數(shù)字的映射

需要先定義一個二維數(shù)組來存放映射關(guān)系。

const string letterMap[10] = {
    "", // 0
    "", // 1
    "abc", // 2
    "def", // 3
    "ghi", // 4
    "jkl", // 5
    "mno", // 6
    "pqrs", // 7
    "tuv", // 8
    "wxyz", // 9
};

基本思路

  • 輸入:要求的digit和定義一個idx來記錄目前遍歷到哪個數(shù)字了。
  • 終止條件,當(dāng)遍歷的數(shù)字和digit長度一樣的時候。
  • 遍歷邏輯:首先要取index指向的數(shù)字,并找到對應(yīng)的字符集(手機鍵盤的字符集)。
class Solution {
private:
    const string letterMap[10] = {
        "", // 0
        "", // 1
        "abc", // 2
        "def", // 3
        "ghi", // 4
        "jkl", // 5
        "mno", // 6
        "pqrs", // 7
        "tuv", // 8
        "wxyz", // 9
    };
    
public:
    vector<string> result;
    string str;
    void traceback(string digits, int idx){
        if(idx == digits.size()){
            result.push_back(str);
            return;
        }
        int digit = digits[idx] - '0';        // 將idx指向的數(shù)字轉(zhuǎn)為int
        string letters = letterMap[digit];      // 取數(shù)字對應(yīng)的字符集
        for (int i = 0; i < letters.size(); i++) {
            str.push_back(letters[i]);            // 處理
            traceback(digits, idx + 1);    // 遞歸,注意index+1,一下層要處理下一個數(shù)字了
            str.pop_back();                       // 回溯
        }

    }

    vector<string> letterCombinations(string digits) {
        if (digits.size() == 0) {
            return result;
        }
        traceback(digits, 0);
        return result;
    }
};

本題的難點主要在于1、字母表和數(shù)字的映射建立和相互轉(zhuǎn)換 2、遞歸邏輯的梳理文章來源地址http://www.zghlxwxcb.cn/news/detail-808979.html

到了這里,關(guān)于DAY25:回溯算法組合題216、17的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 代碼隨想錄Day20 回溯算法 LeetCode77 組合問題

    代碼隨想錄Day20 回溯算法 LeetCode77 組合問題

    以下內(nèi)容更詳細解釋來自于:代碼隨想錄 (programmercarl.com) 回溯法也叫回溯搜索法,是搜索法的一種,我們之前在二叉樹中也經(jīng)常使用到回溯來解決問題,其實 有遞歸就有回溯 ,有的時候回溯隱藏在遞歸之下,我們不容易發(fā)覺,今天我們來詳細介紹一下什么是回溯,它能解決哪些問題.

    2024年02月08日
    瀏覽(93)
  • 力扣日記1.22-【回溯算法篇】216. 組合總和 III

    日期:2023.1.22 參考:代碼隨想錄、力扣 題目描述 難度:中等 找出所有相加之和為 n 的 k 個數(shù)的組合,且滿足下列條件: 只使用數(shù)字1到9 每個數(shù)字 最多使用一次 返回 所有可能的有效組合的列表 。該列表不能包含相同的組合兩次,組合可以以任何順序返回。 示例 1: 輸入:

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

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

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

    2024年02月11日
    瀏覽(25)
  • 【力扣】216. 組合總和 III <回溯、回溯剪枝>

    【力扣】216. 組合總和 III <回溯、回溯剪枝>

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

    2024年02月10日
    瀏覽(18)
  • day24 | 回溯算法基礎(chǔ)、77. 組合

    目錄: 回溯法理論基礎(chǔ) https://programmercarl.com/回溯算法理論基礎(chǔ).html#題目分類大綱如下 回溯法,一般可以解決如下幾種問題: 組合問題:N個數(shù)里面按一定規(guī)則找出k個數(shù)的集合 切割問題:一個字符串按一定規(guī)則有幾種切割方式 子集問題:一個N個數(shù)的集合里有多少符合條件的

    2024年02月11日
    瀏覽(20)
  • 代碼隨想錄算法訓(xùn)練DAY25|回溯2

    代碼隨想錄算法訓(xùn)練DAY25|回溯2

    力扣題目鏈接 找出所有相加之和為 n 的 k 個數(shù)的組合。組合中只允許含有 1 - 9 的正整數(shù),并且每種組合中不存在重復(fù)的數(shù)字。 說明: 所有數(shù)字都是正整數(shù)。 解集不能包含重復(fù)的組合。 示例 1: 輸入: k = 3, n = 7 輸出: [[1,2,4]] 示例 2: 輸入: k = 3, n = 9 輸出: [[1,2,6], [1,3,5], [2,3,4]

    2024年01月22日
    瀏覽(91)
  • leetcode77. 組合(回溯算法-java)

    leetcode77. 組合(回溯算法-java)

    來源:力扣(LeetCode) 鏈接:https://leetcode.cn/problems/combinations 給定兩個整數(shù) n 和 k,返回范圍 [1, n] 中所有可能的 k 個數(shù)的組合。 你可以按 任何順序 返回答案。 示例 1: 輸入:n = 4, k = 2 輸出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 示例 2: 輸入:n = 1, k = 1 輸出:[[1]] 提示:

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

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

    2024年02月05日
    瀏覽(26)
  • 代碼隨想錄22| 216.組合總和III, 17.電話號碼的字母組合

    題目鏈接/文章講解:鏈接地址 視頻講解:鏈接地址 代碼思路:回溯三部曲: 1.確定函數(shù)參數(shù):n,k,sum,startIndex; 2.結(jié)束條件,path == k,并且如果sum==n 結(jié)束遞歸 3.遞歸回溯邏輯。 題目鏈接/文章講解:鏈接地址 視頻講解:鏈接地址 代碼思路:傳入?yún)?shù):輸入的數(shù)字,第幾個數(shù)字的

    2024年02月11日
    瀏覽(86)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包