题目链接:216. 组合总和 III
class Solution {
public:
vector<int> vec;
vector<vector<int>> result;
vector<vector<int>> combinationSum3(int k, int n) {
backtracking(n, k, 1, 0);
return result;
}
void backtracking(const int& n, const int& k, int start_idx, int sum) {
if(vec.size() == k) {
if(sum == n) result.push_back(vec);
return;
}
for(int i = start_idx; 10 - i + vec.size() >= k; i++) {
sum += i;
vec.push_back(i);
backtracking(n, k, i + 1, sum);
sum -= i;
vec.pop_back();
}
}
};
题目链接:17. 电话号码的字母组合
class Solution {
public:
vector<string> letters = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
vector<string> letterCombinations(string digits) {
vector<string> result;
if(digits.length() == 0) return result;
reverse(digits.begin(), digits.end());
string str;
backtracking(digits, str, result);
return result;
}
void backtracking(string digits, string& s, vector<string>& result) {
if(digits.length() == 0) {
result.push_back(s);
return;
}
char num = *(digits.end() - 1);
int idx = num - '0' - 2;
digits.pop_back();
for(char c : letters[idx]) {
s.push_back(c);
backtracking(digits, s, result);
s.pop_back();
}
}
};