代码随想录算法训练营第二十五天 | 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(); } } };