216. 组合总和 III
1 class Solution { 2 private: 3 vector<vector<int>> result; 4 vector<int> path; 5 //1、确定回溯函数返回值和参数 6 //n - 目标值, k - 集合数目, sum - 用来匹配的和, 每次回溯的索引 7 void backtracking(int n, int k, int sum, int startIndex) { 8 //2、确定回溯停止的条件 9 if (path.size() == k) { 10 if (sum == n) result.push_back(path); 11 return; 12 } 13 //3、确定单层回溯的逻辑 14 for (int i = startIndex; i <= 9; i++) { 15 sum += i; 16 path.push_back(i); 17 backtracking(n, k, sum, i + 1); 18 sum -= i; 19 path.pop_back(); 20 } 21 } 22 public: 23 vector<vector<int>> combinationSum3(int k, int n) { 24 result.clear(); 25 path.clear(); 26 backtracking(n, k, 0, 1); 27 return result; 28 } 29 };
17. 电话号码的字母组合
1 class Solution { 2 private: 3 //创建字符集 4 const string letterMap[10] = { 5 "", // 0 6 "", // 1 7 "abc", // 2 8 "def", // 3 9 "ghi", // 4 10 "jkl", // 5 11 "mno", // 6 12 "pqrs", // 7 13 "tuv", // 8 14 "wxyz", // 9 15 }; 16 public: 17 //创建存放结果的变量 18 vector<string> result; 19 string s; 20 //1、确定回溯函数的参数和返回值 21 //digits - 输入的字符串, index - 记录遍历的编号 22 void backtracking(const string& digits, int index) { 23 //2、确定回溯截止的条件 24 if (index == digits.size()) { 25 result.push_back(s); 26 return; 27 } 28 int digit = digits[index] - '0'; 29 string letters = letterMap[digit]; 30 //3、确定回溯函数的单层逻辑 31 for (int i = 0; i < letters.size(); i++) { 32 s.push_back(letters[i]); 33 backtracking(digits, index + 1); 34 s.pop_back(); 35 } 36 } 37 public: 38 vector<string> letterCombinations(string digits) { 39 s.clear(); 40 result.clear(); 41 if (digits.size() == 0) { 42 return result; 43 } 44 backtracking(digits, 0); 45 return result; 46 } 47 };
原文地址:http://www.cnblogs.com/zsqy/p/16827438.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性