216.组合总和III
代码随想录链接
题目
LeetCode-216.组合总和III
使用\([1, 9]\)范围内的k个正整数,
找出这k个正整数之和等于n的所有组合.
自己的想法
和昨天的题一样, 回溯套模板呗.
题解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| class Solution { private: vector<vector<int>> result; vector<int> current; int sum = 0; void backtracing(int k, int n, int start) { if (current.size() == k) { if (sum == n) { result.push_back(current); } return; }
for (int i = start + 1; i <= n - sum && i < 10; i++) { current.push_back(i); sum += i; backtracing(k, n, i); current.pop_back(); sum -= i; } } public: vector<vector<int>> combinationSum3(int k, int n) { backtracing(k, n, 0); return result; } };
|
17.电话号码的字母组合
代码随想录链接
题目
LeetCode-17.电话号码的字母组合
给定一个包含2-9的字符串, 返回其中能代表的所有字母组合,
2-9与字母的映射关系与功能机按键相同.暴露年龄
自己的想法
与上一题相似, 多加一些判断即可.
题解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| class Solution { private: vector<string> result; string path = ""; const string letterMap[10] = { "", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz", }; void backtracing(string digits, int letterIndex) { if (path.size() == digits.size() && digits.size()) { result.push_back(path); return; } if (letterIndex >= digits.size()) return; int currentDigits = digits[letterIndex] - '0'; for (int i = 0; i < letterMap[currentDigits].size(); i++) { path += letterMap[currentDigits][i]; backtracing(digits, letterIndex + 1); path.pop_back(); } } public: vector<string> letterCombinations(string digits) { backtracing(digits, 0); return this -> result; } };
|