上海企业网站优化公司,使用asp.net制作网站的整体过程,微信开放平台开发文档,建设网站大概需要多少钱题目链接#xff1a;
力扣#xff08;LeetCode#xff09;官网 - 全球极客挚爱的技术成长平台
思路#xff1a; 数字对应字母用map(这里不好用#xff09;#xff0c;还是用数组映射#xff0c;因为这里的映射表是个静态的 组合的思想。比如2,3就是需要选两个字母即搜…题目链接
力扣LeetCode官网 - 全球极客挚爱的技术成长平台
思路 数字对应字母用map(这里不好用还是用数组映射因为这里的映射表是个静态的 组合的思想。比如2,3就是需要选两个字母即搜索树的深度k2。不同的是组合中是在同一组数中选现在是在两个序列中分别选择。 感觉暴力破解是不是更方便。发现循环次数不是固定的也就是回溯解决的问题还得用回溯。
我的代码 敲完总感觉哪里有问题结果竟然一遍过了
class Solution {
private:const string letterMap[10] {, // 0, // 1abc, // 2def, // 3ghi, // 4jkl, // 5mno, // 6pqrs, // 7tuv, // 8wxyz, // 9
};
public:std::vectorstring result;string res;vectorstring letterCombinations(string digits) {if(digits ) return {};comb(digits, digits.size(), 0);return result;}//第一步确定参数k是深度也就是结果字串的长度index是递归到第几个数字void comb(string digits, int k, int index){if(res.size() k)//第二部返回条件{result.push_back(res);return;}//第二步一次循环int num digits[index] - 0;//确定映射表数字for(int i 0; i letterMap[num].size(); i){res.push_back(letterMap[num][i]);comb(digits, k, index1);//下一层res.pop_back();}}
}; 随想录代码
// 版本一
class Solution {
private:const string letterMap[10] {, // 0, // 1abc, // 2def, // 3ghi, // 4jkl, // 5mno, // 6pqrs, // 7tuv, // 8wxyz, // 9};
public:vectorstring result;string s;void backtracking(const string digits, int index) {if (index digits.size()) {result.push_back(s);return;}int digit digits[index] - 0; // 将index指向的数字转为intstring letters letterMap[digit]; // 取数字对应的字符集for (int i 0; i letters.size(); i) {s.push_back(letters[i]); // 处理backtracking(digits, index 1); // 递归注意index1一下层要处理下一个数字了s.pop_back(); // 回溯}}vectorstring letterCombinations(string digits) {s.clear();result.clear();if (digits.size() 0) {return result;}backtracking(digits, 0);return result;}
};