408算法题leetcode--第29天

17. 电话号码的字母组合

题目地址

题解思路:回溯

时间复杂度:O(3^m * 4^n)

空间复杂度:O(3^m * 4^n)

代码:

cpp 复制代码
class Solution {
public:
    // map digit to word
    string digit_to_word[10] = {
        "", // 0
        "", // 1
        "abc", // 2
        "def", // 3
        "ghi", // 4
        "jkl", // 5
        "mno", // 6
        "pqrs", // 7
        "tuv", // 8
        "wxyz", // 9
    };

    vector<string>ret;
    string str;

    void backtrack(string& digits, int start){
        if(start == digits.size()){
            ret.push_back(str);
            return ;
        }
        int id = digits[start] - '0';
        string temp = digit_to_word[id];
        int size = temp.size();
        for(int i = 0; i < size; i++){
            str += temp[i];
            backtrack(digits, start + 1);
            str.pop_back();
        }
    }

    vector<string> letterCombinations(string digits) {
        // 1. 返回类型和参数
        // 2. 终止
        // 3. 单层循环
        if(digits.empty()) return ret;
        backtrack(digits, 0);
        return ret;
    }
};

39. 组合总和

题目地址39. 组合总和 - 力扣(LeetCode)

题解思路:回溯

时间复杂度 :O(n * 2n),n个数,每个数考虑选or不选(2n)

空间复杂度:O(target)

代码:

cpp 复制代码
class Solution {
public:
    vector<vector<int>>ret;
    vector<int>arr;

    void backtrack(vector<int>& candidates, int target, int sum, int start){
        if(sum > target){
            return ;
        }
        if(sum == target){
            ret.push_back(arr);
            return ;
        }
        int size = candidates.size();
        for(int i = start; i < size; i++){
            arr.push_back(candidates[i]);
            backtrack(candidates, target, sum + candidates[i], i);
            arr.pop_back();
        }
    }

    vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
        // 组合问题:回溯 + 剪枝
        backtrack(candidates, target, 0, 0);
        return ret;
    }
};
相关推荐
njxiejing6 分钟前
考研408计算机网络第36题真题解析(2021-2023)
计算机网络·考研
橘子139 分钟前
递归,搜索与回溯算法
算法
黄贵根21 分钟前
C++20 基于文本文件的类对象增删查改系统
算法·c++20
max50060033 分钟前
使用OmniAvatar-14B模型实现照片和文字生成视频的完整指南
图像处理·人工智能·深度学习·算法·音视频
可触的未来,发芽的智生41 分钟前
追根索源-神经网络的灾难性遗忘原因
人工智能·神经网络·算法·机器学习·架构
一只乔哇噻1 小时前
java后端工程师进修ing(研一版‖day44)
java·开发语言·学习·算法
·云扬·3 小时前
【Leetcode hot 100】101.对称二叉树
算法·leetcode·职场和发展
Greedy Alg8 小时前
LeetCode 142. 环形链表 II
算法
睡不醒的kun8 小时前
leetcode算法刷题的第三十二天
数据结构·c++·算法·leetcode·职场和发展·贪心算法·动态规划
先做个垃圾出来………9 小时前
残差连接的概念与作用
人工智能·算法·机器学习·语言模型·自然语言处理