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

73 阅读1分钟

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

216. 组合总和 III

题目链接:216. 组合总和 III

  • 直接在组合的代码里加条件判断和为n的时候返回是不正确的 (因为传参错了 hhh)
  • 剪枝
  • targetSum < sum
  • i <= n - (k - path.size( )) + 1

17. 电话号码的字母组合

题目链接:17. 电话号码的字母组合

  • 这里要注意需要递归的是数字,循环展开的是每个数字对应的字母们
  •  class Solution {
     public:
         vector<string> res;
         string path;
         vector<string> dials{
             "",
             "", 
             "abc", 
             "def", 
             "ghi",
             "jkl",
             "mno",
             "pqrs",
             "tuv",
             "wxyz"
         };
      
         vector<string> letterCombinations(string digits) {
             if(digits.size() == 0) {
                 return res;
             }
             backTrack(digits, 0);
             return res;
         }
         void backTrack(string digits, int startIndex) {
             if(startIndex == digits.size()) {
                 res.push_back(path);
                 // 需要return,因为后面的startIndex会出界
                 return;
             }
             string dial = dials[digits[startIndex] - '0'];
             for (int i = 0; i < dial.size(); i++) {
                 path.push_back(dial[i]);
                 backTrack(digits, startIndex + 1);
                 path.pop_back();
             }
         }
     };