代码随想录22| 216.组合总和III, 17.电话号码的字母组合

这篇具有很好参考价值的文章主要介绍了代码随想录22| 216.组合总和III, 17.电话号码的字母组合。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

216.组合总和III

题目链接/文章讲解:链接地址
视频讲解:链接地址

代码思路:回溯三部曲:
1.确定函数参数:n,k,sum,startIndex;
2.结束条件,path == k,并且如果sum==n 结束递归
3.递归回溯逻辑。

class Solution {
    vector<int> path;
    vector<vector<int>> result; 

private:
    void back_tracking(int k, int n, int startIndex, int sum) {
        if (path.size() == k) {
            if (sum == n) result.push_back(path);
            return;
        }
        for (int i = startIndex; i <= 9; i++) {
            sum += i;
            path.push_back(i);
            back_tracking(k, n, i + 1, sum);
            sum -= i;
            path.pop_back();
        }
    }
    
public:
    vector<vector<int>> combinationSum3(int k, int n) {
        int sum;
        back_tracking(k, n, 1, sum);
        return  result;
    }
};

17.电话号码的字母组合

题目链接/文章讲解:链接地址
视频讲解:链接地址

代码思路:传入参数:输入的数字,第几个数字的索引
结束条件:第几个数字的索引等于输入数字的长度
递归回溯:先找到创建的数字Map的索引,然后找到对应数字下的字符进行遍历递归。文章来源地址https://www.toymoban.com/news/detail-670039.html

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
    };
    string s;
    vector<string> result; 
    void back_traking(string digits, int index) {
        if (index == digits.size()) {
            result.push_back(s);
            return;
        }
        //转数字
        int numIndex = digits[index] - '0';
        //映射数字对应的字符
        string stringNum = letterMap[numIndex];
        for (int i = 0; i < stringNum.size(); i++) {
            s.push_back(stringNum[i]);
            back_traking(digits, index + 1);
            s.pop_back();
        }
    }
public:
    vector<string> letterCombinations(string digits) {
        if (digits == "") return result;
        back_traking(digits,0);
        return result;
    }
};

到了这里,关于代码随想录22| 216.组合总和III, 17.电话号码的字母组合的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【LeetCode:216. 组合总和 III + 递归】

    🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文

    2024年04月25日
    浏览(26)
  • 【力扣】216. 组合总和 III <回溯、回溯剪枝>

    找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字 1 到 9,每个数字最多使用一次,返回所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 示例 1: 输入: k = 3, n = 7 输出: [[1,2,4]] 解释: 1 + 2 + 4 = 7 没有其他符合的组合

    2024年02月10日
    浏览(26)
  • leetcode216. 组合总和 III(回溯算法-java)

    来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/combination-sum-iii 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 示例 1: 输

    2024年02月10日
    浏览(33)
  • LeetCode刷题13:回溯+剪枝解决216.组合总和 III

    找出所有相加之和为  n   的  k   个数的组合,且满足下列条件: 只使用数字1到9 每个数字  最多使用一次   返回  所有可能的有效组合的列表  。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 示例 1: 输入: k = 3, n = 7 输出: [[1,2,4]] 解释: 1 + 2 + 4 = 7 没有其他

    2024年02月02日
    浏览(37)
  • 代码随想录二刷day17

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 二叉树中深度指的是根节点到当前节点的节点个数, 二叉树中的高度指的是当前节点到叶子节点的节点个数 可以通前序遍历求深度 通过后序遍历求高度 递归 递归 迭代 递归 迭代 递归 递归

    2024年02月09日
    浏览(25)
  • 代码随想录阅读笔记-回溯【电话号码的字母组合】

    题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:\\\"23\\\" 输出:[\\\"ad\\\", \\\"ae\\\", \\\"af\\\", \\\"bd\\\", \\\"be\\\", \\\"bf\\\", \\\"cd\\\", \\\"ce\\\", \\\"cf\\\"]. 说明:尽管上面的答案是按字典序排列的,但是你可以任意

    2024年04月13日
    浏览(27)
  • 代码随想录Day20 回溯算法 LeetCode77 组合问题

    以下内容更详细解释来自于:代码随想录 (programmercarl.com) 回溯法也叫回溯搜索法,是搜索法的一种,我们之前在二叉树中也经常使用到回溯来解决问题,其实 有递归就有回溯 ,有的时候回溯隐藏在递归之下,我们不容易发觉,今天我们来详细介绍一下什么是回溯,它能解决哪些问题.

    2024年02月08日
    浏览(32)
  • 【Day22-慢就是快】代码随想录-二叉树-迭代遍历

    用迭代法实现二叉树的前后中序遍历。 递归的实现就是:每一次递归调用都会把函数的局部变量、参数值和返回地址等压入调用栈中 ,然后递归返回的时候,从栈顶弹出上一次递归的各项参数,所以这就是递归为什么可以返回上一层位置的原因。 此时大家应该知道我们用栈

    2024年02月10日
    浏览(35)
  • 代码随想录刷题第48天|LeetCode198打家劫舍、LeetCode213打家劫舍II、LeetCode337打家劫舍III

    1、LeetCode198打家劫舍 题目链接:198、打家劫舍 1、dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i] 。 2、递推公式: 如果偷第i房间,那么dp[i] = dp[i - 2] + nums[i] ; 如果不偷第i房间,那么dp[i] = dp[i - 1]; 然后dp[i]取最大值,即dp[i] = max(dp[i - 2] + nums[i], dp[i - 1

    2024年02月08日
    浏览(38)
  • 第18天-代码随想录刷题训练-第六章● 513.找树左下角的值 ● 112. 路径总和 113.路径总和ii ● 106.从中序与后序遍历序列构造二叉树 105.从前序与中序遍历序列构造二叉树

    - LeetCode链接 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 遍历顺序,因为本题要求的是 最后一层最左边的节点,因此只要遍历顺序 左节点在右节点前就行,因此 任何遍历顺序都可以 本题中的中节点 不需要处

    2024年02月04日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包