216. 组合总和 III
class Solution {
public:
vector<vector<int>> ans;
void dfs(int k, int n, vector<int> arr, int m)
{
if (arr.size()==k)
{
int sum = 0;
for (int i=0; i<arr.size(); i++)
{
sum += arr[i];
}
if (sum==n) ans.push_back(arr);
return;
}
for (int i=m; i<=9; i++)
{
arr.push_back(i);
dfs(k,n,arr,i+1);
arr.pop_back();
}
}
vector<vector<int>> combinationSum3(int k, int n)
{
vector<int> arr;
dfs(k, n, arr, 1);
return ans;
}
};
17. 电话号码的字母组合
class Solution {
public:
unordered_map<char, vector<char>> str;
vector<string> ans;
void dfs(string digits, int m, string s)
{
if (m==digits.size())
{
ans.push_back(s);
return;
}
for (int i=0; i<str[digits[m]].size(); i++)
{
s.push_back(str[digits[m]][i]);
dfs(digits, m+1, s);
s.pop_back();
}
}
vector<string> letterCombinations(string digits)
{
if (digits.size()==0) return ans;
str.insert({'2', vector<char>({'a','b','c'})});
str.insert({'3', vector<char>({'d','e','f'})});
str.insert({'4', vector<char>({'g','h','i'})});
str.insert({'5', vector<char>({'j','k','l'})});
str.insert({'6', vector<char>({'m','n','o'})});
str.insert({'7', vector<char>({'p','q','r','s'})});
str.insert({'8', vector<char>({'t','u','v'})});
str.insert({'9', vector<char>({'w','x','y','z'})});
string s= "";
dfs(digits, 0, s);
return ans;
}
};