首页 > 编程语言 >【算法训练营day25】LeetCode216. 组合总和III LeetCode17. 电话号码的字母组合

【算法训练营day25】LeetCode216. 组合总和III LeetCode17. 电话号码的字母组合

时间:2023-01-26 13:44:27浏览次数:67  
标签:index return day25 int result LeetCode17 字母组合 path backtracking

LeetCode216. 组合总和III

题目链接:216. 组合总和III

独上高楼,望尽天涯

继续复健,一直在犯小的语法错误。

慕然回首,灯火阑珊

和昨天的题很像,主要区别在于递归返回条件和回溯过程。

class Solution {
private:
    vector<vector<int>> result;
    vector<int> path;
    void backtracking(int k, int target_sum, int start_index) {
        if (path.size() == k) {
            if (target_sum == 0) result.push_back(path);
            return;
        }
        for (int i = start_index; i <= 9; i++) { // 注意中间是<=
            target_sum -= i;
            path.push_back(i);
            backtracking(k, target_sum, i+1);
            target_sum += i;
            path.pop_back();
        }
    }
public:
    vector<vector<int>> combinationSum3(int k, int n) {
        backtracking(k, n, 1);
        return result;
    }
};

剪枝操作

class Solution {
private:
    vector<vector<int>> result;
    vector<int> path;
    void backtracking(int k, int target_sum, int start_index) {
        if (target_sum < 0) { // 剪枝操作
            return;
        }
        if (path.size() == k) {
            if (target_sum == 0) result.push_back(path);
            return;
        }
        for (int i = start_index; i <= 9 - (k - path.size()) + 1; i++) { // 剪枝操作
            target_sum -= i;
            path.push_back(i);
            backtracking(k, target_sum, i+1);
            target_sum += i;
            path.pop_back();
        }
    }
public:
    vector<vector<int>> combinationSum3(int k, int n) {
        backtracking(k, n, 1);
        return result;
    }
};

LeetCode17. 电话号码的字母组合

题目链接:17. 电话号码的字母组合

独上高楼,望尽天涯

思路不难,细节很多,写起来有点浆糊。

慕然回首,灯火阑珊

class Solution {
private:
    const string letter_map[10] = {
        "",
        "",
        "abc",
        "def",
        "ghi",
        "jkl",
        "mno",
        "pqrs",
        "tuv",
        "wxyz"
    };
    vector<string> result;
    string path;
    void backtracking(const string& digits, int index) {
        if (path.size() == digits.size()) {
            result.push_back(path);
            return;
        }
        int digit = digits[index] - '0'; // char转int小技巧
        string letter = letter_map[digit];
        for (int i = 0; i < letter.size(); i++) {
            path.push_back(letter[i]); // 处理
            backtracking(digits, index+1); //递归
            path.pop_back(); // 回溯
        }
    }
public:
    vector<string> letterCombinations(string digits) {
        if (digits.size() == 0) {
            return result;
        }
        backtracking(digits, 0);
        return result;
    }
};

标签:index,return,day25,int,result,LeetCode17,字母组合,path,backtracking
From: https://www.cnblogs.com/BarcelonaTong/p/17067756.html

相关文章

  • day25-类加载器反射
    1.类加载器1.1类加载器【理解】作用负责将.class文件(存储的物理文件)加载在到内存中1.2类加载的过程【理解】类加载时机创建类的实例(对象)调用类的类方法访......
  • 代码随想录算法训练营第二十五天 | ● 216.组合总和III ● 17.电话号码的字母组合
    今日内容:●216.组合总和III●17.电话号码的字母组合详细布置216.组合总和III如果把组合问题理解了,本题就容易一些了。题目链接/文章讲解:https://programme......
  • [LeetCode]017-电话号码的字母组合
    >>>传送门题目给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。给出数字到字母的映射如下(与电话按键相同)。注意1不对应任......
  • leetcode-17. 电话号码的字母组合
    17.电话号码的字母组合给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。给出数字到字母的映射如下(与电话按键相同)。注意1不对应......
  • 代码随想录算法训练营Day25|216. 组合总和 III、17. 电话号码的字母组合
    代码随想录算法训练营Day25|216.组合总和III、17.电话号码的字母组合216.组合总和III216.组合总和III与「77.组合」类似,但区别在于题干要求的变化:只使用数字1......
  • Day25.2.Arrays类
    Day25.2.Arrays类1.介绍数组工具类java.util.Arrays由于数组对象本身并没有什么方法可以调用,但API中提供了工具类Arrays供使用,从而对数组对象进行一些基本操作具......
  • 【LeeCode】17. 电话号码的字母组合
    【题目描述】给定一个仅包含数字 ​​2-9​​ 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意1不对......
  • javascript-代码随想录训练营day25
    216.组合总和Ⅲ题目链接:https://leetcode.cn/problems/combination-sum-iii/题目描述:找出所有相加之和为n的k个数的组合,且满足下列条件:只使用数字1到9每个数字......
  • leetcode.cn 17.电话号码的字母组合 - 生成组合数
    这题难度标为“中等”,那肯定不难。看完题,知道就是生成组合数。想起当年上学的时候我还做过一个组合工具类。于是在磁盘上搜索,找到一看,原来当年是Java写的一个类,代码也很简......
  • Day25:接口详解
    接口1.1什么是接口1.2接口的特点接口的关键字是interface接口语句格式:publicinterface接口名{}publicinterfaceJumpping{voidjump();//接口的方法有且一定......