组合
77.组合
class Solution {
public:
vector<int> path;
vector<vector<int>> res;
vector<vector<int>> combine(int n, int k) {
backtracking(1, n, k);
return res;
}
void backtracking(int startIndex, int &endIndex, const int &k){
if(path.size() == k){
res.push_back(path);
return;
}
if(startIndex > endIndex)
return;
for(int i = startIndex; i <= endIndex; i++){
path.push_back(i);
backtracking(i+1, endIndex, k);
path.pop_back();
}
}
};
组合总和III
216.组合总和III
class Solution {
public:
vector<int> path;
vector<vector<int>> res;
vector<vector<int>> combinationSum3(int k, int n) {
backtracking(1, k, n);
return res;
}
void backtracking(int i, int k, int n){
if(path.size() == k && n == 0){
res.push_back(path);
return;
}
if(n < 0 || i > n){
return;
}
while(i <= n && i <= 9){
path.push_back(i);
backtracking(i+1, k, n-i);
path.pop_back();
i++;
}
}
};
电话号码的字母组合
17.电话号码的字母组合
class Solution {
public:
vector<string> dic = {"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
string path;
vector<string> res;
vector<string> letterCombinations(string digits) {
if(digits.size() == 0)
return {};
vector<int> nums;
for(int i = 0; i < digits.length(); i++){
nums.push_back(digits[i] - '2');
}
backtracking(nums, 0);
return res;
}
void backtracking(vector<int> nums, int index){
if(path.size() == nums.size()){
res.push_back(path);
return;
}
for(int i = 0; i < dic[nums[index]].length(); i++){
path.push_back(dic[nums[index]][i]);
backtracking(nums, index+1);
path.pop_back();
}
}
};