216. 组合总和 III
1 class Solution {
2 public:
3 vector<vector<int>> combinationSum3(int k, int n) {
4 back_tracking(k, n, 1, 0);
5 return result;
6 }
7 private:
8 vector<vector<int>> result;
9 vector<int> tmp;
10 void back_tracking(int k, int n, int start, int sum){
11 if(tmp.size() == k && sum == n){
12 result.push_back(tmp);
13 }
14 for(int i = start; i <= 9; i++){
15 tmp.push_back(i);
16 back_tracking(k, n, i+1, sum+i);
17 tmp.pop_back();
18 }
19 }
20 };
1 class Solution {
2 private:
3 vector<string> result;
4 string path;
5 const string vec[8] = {
6 "abc",
7 "def",
8 "ghi",
9 "jkl",
10 "mno",
11 "pqrs",
12 "tuv",
13 "wxyz"
14 };
15 void back_tracking(const string& digits, int start){
16 if(start == digits.size()){
17 result.push_back(path);
18 return;
19 }
20 int index = digits[start] - '2';
21 string str = vec[index];
22 for(int i = 0; i < str.size(); i++){
23 path.push_back(str[i]);
24 back_tracking(digits, start + 1);
25 path.pop_back();
26 }
27
28 }
29 public:
30 vector<string> letterCombinations(string digits) {
31 if(digits.size() == 0) return result;
32 back_tracking(digits, 0);
33 return result;
34 }
35 };