首页 > 编程语言 >算法刷题 Day 25 | 216.组合总和III 17.电话号码的字母组合

算法刷题 Day 25 | 216.组合总和III 17.电话号码的字母组合

时间:2023-01-29 21:45:17浏览次数:51  
标签:216 digits return 25 int E7% E5% result 字母组合

今日内容:

  • 组合总和III
  • 电话号码的字母组合

详细布置

216.组合总和III

如果把 组合问题理解了,本题就容易一些了。

题目链接/文章讲解:https://programmercarl.com/0216.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8CIII.html

视频讲解:https://www.bilibili.com/video/BV1wg411873x

Tips:这道题比起组合那道题,就是多了一个sum需要考虑,其他的地方都一样,然后有两处地方可以剪枝

我的题解:

class Solution {
public:
    vector<vector<int>> result;
    vector<int> temp;
    int sum = 0;
    void backtracking(int k, int n, int begin){
        if(sum == n && temp.size() == k){
            result.push_back(temp);
            return;
        }
        // 这里sum > n的话可以剪枝
        if(temp.size() >= k || sum > n){
            return;
        }
        
        // 这里长度不够的话也可以剪枝
        for(int i = begin; i <= 9 - (k - temp.size()) + 1; i++){
            sum += i;
            temp.push_back(i);
            backtracking(k,n,i+1);
            temp.pop_back();
            sum -= i;
        }
    }

    vector<vector<int>> combinationSum3(int k, int n) {
        backtracking(k,n,1);
        return result;
    }
};

17.电话号码的字母组合

本题大家刚开始做会有点难度,先自己思考20min,没思路就直接看题解。

题目链接/文章讲解:https://programmercarl.com/0017.%E7%94%B5%E8%AF%9D%E5%8F%B7%E7%A0%81%E7%9A%84%E5%AD%97%E6%AF%8D%E7%BB%84%E5%90%88.html

视频讲解:https://www.bilibili.com/video/BV1yV4y1V7Ug

Tips:这道题只要有了字母本就不难,注意这里可以用一个字符串数组来定义字母本。然后输入的digits是用字符串形式给出的,要获得其中某一位的数字,可以用那一位的char与'0'相减得到。

我的题解:

class Solution {
public:
    const string phone[10] = {
        "", // 0
        "", // 1
        "abc", // 2
        "def", // 3
        "ghi", // 4
        "jkl", // 5
        "mno", // 6
        "pqrs", // 7
        "tuv", // 8
        "wxyz", // 9
    };

    vector<string> result;
    string path;

    void backtracking(string digits, int pos){
        if(pos == digits.size()){
            result.push_back(path);
            return;
        }

        int digit = digits[pos] - '0';
        
        for(int i = 0; i< phone[digit].size();i++){
            path.push_back(phone[digit][i]);
            backtracking(digits, pos+1);
            path.pop_back();
        }

    }
    
    vector<string> letterCombinations(string digits) {
        if(digits.size() == 0){
            return result;
        }
        backtracking(digits, 0);
        return result;
    }
};

标签:216,digits,return,25,int,E7%,E5%,result,字母组合
From: https://www.cnblogs.com/GavinGYM/p/17073904.html

相关文章