代码随想录算法训练营第二十五天 | 216.组合总和III,17.电话号码的字母组合

分段排列,有点像乘法原理,各个区间的顺序确定,但是区间的内部元素不确定,针对各个区间回溯,区间之间相互独立

cpp 复制代码
class Solution {
public:
    vector<string> res;
    string resStr;
    vector<string> chooseList;
    void resInit(){
        for(int i = 0;i< 10;i++){
            string chooseStr ="";
            switch(i){
                case 2:{
                    chooseStr = "abc";
                    break;
                }
                case 3:{
                    chooseStr = "def";
                     break;
                }
                case 4:{
                    chooseStr = "ghi";
                     break;
                }
                case 5:{
                    chooseStr = "jkl";
                    break;
                }
                case 6:{
                    chooseStr = "mno";
                     break;
                }
                case 7:{
                    chooseStr = "pqrs";
                     break;
                }
                 case 8:{
                    chooseStr = "tuv";
                     break;
                }
                case 9:{
                    chooseStr = "wxyz";
                     break;
                }
                default:
                     break;
            }

            chooseList.push_back(chooseStr);
        }
    }
    bool isValid();
    void traceback(string resStr,string & digits,int seq){

        if(resStr.size() == digits.size()){
           res.push_back(resStr);
           return;
        }

        for(auto j : chooseList[(digits[seq] -'0')]){
              resStr.push_back(j);
              traceback(resStr,digits,seq+1);
              resStr.pop_back();
        }
    }
    vector<string> letterCombinations(string digits) {
        resInit();
        if(digits == ""){
            return res;
        }
        traceback(resStr,digits,0);
        return res;
    }
};


无重组合,不可复取

cpp 复制代码
class Solution {  
public:
    vector<vector<int>> res;
    vector<int> resVec;
    vector<int> chooseList;
    void resInit(){
        for(int i =0;i< 9;i++){
            chooseList.push_back(i+1);
        }
    }
    bool isValid();
    void traceback(vector<int> resVec,vector<int> &chooseList,int &n,int &k,int sum,int start){
        if(k == resVec.size()){
            if(sum == n){
                res.push_back(resVec);
            }
            return;
        }
        
        for(int i =start;i< chooseList.size();i++){
            resVec.push_back(chooseList[i]);
            traceback(resVec,chooseList,n,k,sum+chooseList[i],i+1);
            resVec.pop_back();
        }
    }
    vector<vector<int>> combinationSum3(int k, int n) {
           resInit();
            traceback(resVec,chooseList,n,k,0,0);
           return res;
    }
};
相关推荐
z小猫不吃鱼13 分钟前
模型剪枝经典论文精读:Channel Pruning for Accelerating Very Deep Neural Networks
算法·机器学习·剪枝
njsgcs30 分钟前
已知链中心距用节数算中间电机摆放位置 常量弧长 三链轮弦长模型算法
算法
aaPIXa6221 小时前
C++ TensorRT Edge-LLM 边缘推理框架:从原理到实战
开发语言·c++·edge
2601_962440841 小时前
计算机毕业设计之jsp旅游网站管理系统
java·开发语言·算法·课程设计·旅游·推荐算法
池塘的蜗牛2 小时前
AFDM波形基于DFT的通感一体化
算法
147API2 小时前
Claude global workspace 研究给智能体测试提了一个醒
人工智能·算法·机器学习
葫三生2 小时前
《论三生原理》与模糊数学的关联、异同、互补关系?
人工智能·科技·算法·机器学习·开源
我命由我123452 小时前
方差(实例实操、与标准差的区别)
java·数据结构·算法·数据分析·java-ee·intellij-idea·idea
闲研随记2 小时前
【文献阅读 ICML 2026】RL算法:Critique-GRPO
论文阅读·算法·llm·强化学习·rl·icml·grpo
nianniannnn3 小时前
c++复习自存--标准模板库STL
开发语言·c++·windows