leetCode Letter Combinations of a Phone Number
方法一:
- 从digits 的第一字符开始遍历
- 每次结果都是在之前的结果的基础上,加上当前数字可能的情况: 所以使用一个vector<string> result 存储每次加的结果;最开始为"";
- 创建一个当前的结果vector<string> temp:要遍历result中的每一个并且遍历当前字符的所有可能,组成新的字符串,加入result vector 中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | class Solution { public : vector<string> letterCombinations(string digits) { vector<string> d={ "" , "" , "abc" , "def" , "ghi" , "jkl" , "mno" , "pqrs" , "tuv" , "wxyz" }; vector<string> result; if (digits.size()==0) return result; result.push_back( "" ); int k=digits.size(); for ( int i=0;i<k;i++) { int c=digits[i]- '0' ; if (c<0||c>9) break ; cout<<c<<endl; vector<string>temp; for ( int j=0;j<d[c].length();j++) { for ( int m=0;m<result.size();m++) { cout<<d[c][j]<<endl; temp.push_back(result[m]+d[c][j]); } } result=temp; } return result; } }; |
方法二:
这道题类似之前的 遍历二叉树输出所有的路径的题。但是我太弱鸡,开始都没有用dfs做出来:
使用深度优先搜索:
- 把最终结果当成dfs 的参数,因为一直要改变,所以是一个引用类型,定义一个参数存储当前拼成的字符串
- dfs递归的终点,是这个数是最后一个数,
- 每次迭代的时候,改变当前拼成的字符串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | void dfs(vector<string>& str,string save, string digits, int temp, int l) { vector<string> d={ "" , "" , "abc" , "def" , "ghi" , "jkl" , "mno" , "pqrs" , "tuv" , "wxyz" }; if (temp==l) { str.push_back(save); return ; } int c=digits[temp]- '0' ; int i=0; while (i<d[c].length()) { cout<<d[c][i]<<endl; dfs(str,save+d[c][i],digits,temp+1,l); i++; } } vector<string> letterCombinations(string digits) { vector<string> str; if (digits.size()==0) return str; string save; dfs (str,save, digits,0, digits.size()) ; return str; |
在递归传递的时候要主要:
1 | dfs(str,save+d[c][i],digits,temp+1,l);<br>表示传入的参数为save+d[c][i], 而递归之前的save 没有改变;<br><br>如果使用 |
save.push_back(d[c][i]);
dfs(str,save+d[c][i],digits,temp+1,l);
save.pop();
如果改变了save, 还需要再变回来。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
· 程序员常用高效实用工具推荐,办公效率提升利器!