回溯题中的组合

文章介绍了两种C++编程问题的解决方案,一是使用回溯算法寻找给定数目的数字组合,二是通过查找表生成电话号码的字母组合。关键函数包括`tracking`和`letterCombinations`,涉及字符串操作如`push_back`、`pop_back`、`append`等。
摘要由CSDN通过智能技术生成

216.组合总和|||
经典的回溯套路

class Solution {
public:
    void tracking(int low,int high,int n,int k,vector<vector<int>>& res,vector<int> temp,int cur){
        if(k==0&&n==cur) {
            res.push_back(temp);
            return ;
        }
        if(k==0) return ;

        for(int i=low;i<=high-k+1;i++) {
            temp.push_back(i);
            cur+=i;
            tracking(i+1,high,n,k-1,res,temp,cur);
            cur-=i;
            temp.pop_back();
        }
    }
    vector<vector<int>> combinationSum3(int k, int n) {
        vector<vector<int>> res;
        vector<int> temp;
        tracking(1,9,n,k,res,temp,0);
        return res;
    }
};

17.电话号码的字母组合
学习一下C++中的string用法:
C++追加字符:
+= 运算符:追加单个参数值。
append 函数:允许追加多个参数值。
push_back 函数:只能追加单个字符。
C++删除字符:
erase:删除指定字符
remove:一般与erase搭配使用
pop_back:删除末尾字符

class Solution {
public:
    const string table[10] = {
        "", // 0
        "", // 1
        "abc", // 2
        "def", // 3
        "ghi", // 4
        "jkl", // 5
        "mno", // 6
        "pqrs", // 7
        "tuv", // 8
        "wxyz", // 9
    };
    
    vector<string> result;
    string s;
    void tracking(string digits,int k){
        if(k>=digits.size()) {
            result.push_back(s);
            return ;
        }
        int num=digits[k]-'0';
        int size=table[num].size();
        string letters=table[num];
        for(int i=0;i<size;i++) {
            s.push_back(table[num][i]);
            tracking(digits,k+1);
            s.pop_back();
        }
    }
    vector<string> letterCombinations(string digits) {
       result.clear();
       s.clear();
       if(digits.size()==0) return result;
       tracking(digits,0);
       return result; 
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值