代码随想录算法训练营第二十五天 | 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;
    }
};
相关推荐
_poplar_32 分钟前
15 【C++11 新特性】统一的列表初始化和变量类型推导
开发语言·数据结构·c++·git·算法
Yupureki37 分钟前
从零开始的C++学习生活 7:vector的入门使用
c语言·c++·学习·visual studio
CoovallyAIHub39 分钟前
YOLO Vision 2025 还没结束!亚洲首场登陆深圳,YOLO26有望亮相
深度学习·算法·计算机视觉
寂静山林44 分钟前
UVa 10447 Sum-up the Primes (II)
算法
奋斗羊羊1 小时前
【C++】使用MSBuild命令行编译ACE、TAO、DDS
开发语言·c++·windows
zy_destiny1 小时前
【工业场景】用YOLOv8实现行人识别
人工智能·深度学习·opencv·算法·yolo·机器学习
GawynKing2 小时前
红黑树-带源码
数据结构·算法·二叉树··红黑树
Dave.B2 小时前
【VTK实战】vtkDepthImageToPointCloud:从2D深度图到3D点云,手把手教你落地3D扫描/AR场景
算法·计算机视觉·3d·ar·vtk
乐迪信息2 小时前
乐迪信息:煤矿堆煤隐患难排查?AI摄像机实时监控与预警
大数据·人工智能·算法·安全·视觉检测
一语雨在生无可恋敲代码~2 小时前
leetcode724 寻找数组的中心下标
数据结构·算法