17.电话号码的组合
- 我怎么也没想到,他还能打一样的。
- 输入的数字的顺序能变,开始在dfs循环时,i总是从0开始;
- 输入的数字的顺序不能变,开始在dfs循环时,i要从自己设定的一个变量p开始。比如输入2,3。当我们循环到 3 ,_时,由于不能从0开始循环,所以2填不进去。
当事人考虑到了2,写的错误代码:(主要思想还是填坑)
int flag_num[200]={0};int flag_char[200]={0};vector<string> letterCombinations(string digits) {vector<string> ans;if(digits.empty()) return ans;string tep;string mapp[12];mapp[2]="abc";mapp[3]="def";mapp[4]="ghi";mapp[5]="jkl";mapp[6]="mno";mapp[7]="pqrs";mapp[8]="tuv";mapp[9]="wxyz";dfs(digits,ans,0,tep,mapp,0);return ans;}void dfs(string digits,vector<string>& ans,int n,string tep,string* mapp,int p){if(n>=digits.size()){ans.push_back(tep);return;}for(int i=p;i<digits.size();i++){if(flag_num[digits[i]-'0']==0){flag_num[digits[i]-'0']=1;for(int j=0;j<mapp[digits[i]-'0'].size();j++){if(flag_char[mapp[digits[i]-'0'][j]]==0){flag_char[mapp[digits[i]-'0'][j]]=1;tep.push_back(mapp[digits[i]-'0'][j]);dfs(digits,ans,n+1,tep,mapp,p+1);tep.pop_back();flag_char[mapp[digits[i]-'0'][j]]=0;}}flag_num[digits[i]-'0']=0;} }}
这个题和之前自己想的有点不一样。
一个是有后效性(比如 n的全排列问题),一个没有(本题)。
从图上看,一个是分支不断减少,另一个是分支同等。
上面的是自己写出来的(所以程序也要模拟这个过程),下面的是客观存在的。
改变自己错误的代码,把一个循环换成了函数参数,同时把flag去掉了。
因为从图上看,这不就成了遍历一棵满n叉树了吗?遍历一棵树还需要标记走过了吗?
vector<string> letterCombinations(string digits)
{vector<string> ans;if(digits.empty()) return ans;string tep;string mapp[12];mapp[2]="abc";mapp[3]="def";mapp[4]="ghi";mapp[5]="jkl";mapp[6]="mno";mapp[7]="pqrs";mapp[8]="tuv";mapp[9]="wxyz";dfs(digits,ans,0,tep,mapp,0);return ans;
}
void dfs(string digits,vector<string>& ans,int n,string tep,string* mapp,int i)
{//这里i是第几个数字if(n>=digits.size()){ans.push_back(tep);return;}for(int j=0; j<mapp[digits[i]-'0'].size(); j++)//数字i里面有几个字母{tep.push_back(mapp[digits[i]-'0'][j]);dfs(digits,ans,n+1,tep,mapp,n+1);tep.pop_back();}
}
17.电话号码的组合相关推荐
- Leetcode 17.电话号码的组合(回溯法)
Time: 20191005 Type: Medium 题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字 ...
- day21|216.组合总和III、17.电话号码的字母组合
216.组合总和III 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9 每个数字 最多使用一次 返回所有可能的有效组合的列表 .该列表不能包含相同的组合两次,组合可以以 ...
- Day25|组合板子|216. 组合总和 III| 17. 电话号码的字母组合
组合板子+剪枝 216. 组合总和 III 剪枝操作? 17. 电话号码的字母组合 216. 组合总和 III class Solution {private:vector<int>tem ...
- LeetCode 216组合总和III 17电话号码的字母组合
文章目录 216组合总和III c++ 代码实现 python 代码实现 17.电话号码的字母组合 c++ 代码实现 python代码实现 216组合总和III 找出所有相加之和为 n 的 k 个数的 ...
- day29 | 216.组合总和III 17.电话号码的字母组合
文章目录 216.组合总和III 1.代码(AC) 2.分析 17.电话号码的字母组合 1.代码 2.分析 216.组合总和III 1.代码(AC) class Solution {List<L ...
- Day25 LeetCode 216. 组合总和 III 17. 电话号码的字母组合
题目:216. 组合总和 III - 力扣(LeetCode) 思路: 1.递归函数参数和返回值:首先需要两个全局变量一维path数组和二维result数组,path数组用来收集路径上的元素,resu ...
- 216.组合总和III 17.电话号码的字母组合
216.组合总和III 回溯的常规思路做这道题: class Solution {List<List<Integer>> list = new ArrayList<> ...
- Suzy找到实习了吗Day25 | 回溯算法进行时:216. 组合总和 III,17电话号码
216. 组合总和 III 题目 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 .该列表不能包含相同的组合两次 ...
- day25|● 216.组合总和III ● 17.电话号码的字母组合
day25 3.13 回溯第二天 216.组合总和III 链接: 216.组合总和III 思路:本题k相当于树的深度,9(因为整个集合就是9个数)就是树的宽度. class Solution {pri ...
最新文章
- Elastic Job从单点到高可用、同城主备、同城双活
- ajax提交到mysql_利用ajax的方式来提交数据到后台数据库及交互功能
- mysql count 类型_MYSQL的COUNT函数
- spring-session用mysql实现session共享实践
- linux复制duo文件,自动生成Linux下Makefile全攻略(转)
- c# winform窗口自适应各种分辨率类
- RocketMQ实战系列-RocketMQ命令详解
- 解决pytorch CrossEntropyLoss报错RuntimeError: 1D target tensor expected, multi-target not supported
- 王道机试指南读后总结-1
- Aurelia – 模块化,简单,可测试的 JS 框架
- pythoncde-实战1--坐标生成
- 以非泛型方式调用泛型方法
- Android中加载ETC2压缩格式(PKM后缀)纹理
- 产品原型图设计Axure教程-CSDN就业班-专题视频课程
- 1.爬虫系统学习--爬虫应知知识(后续还会更新)
- 计算机并口回路测试工具,COM口和LPT口回路环的制作与CheckIT3.0测试方法
- Qt之QTableView的简单使用(含源码+注释)
- uniapp -nvue 轮播图与背景图的淡入淡出效果
- [c#]删除PDF权限密码
- assimp批量转模型,[OpenGL] 使用Assimp导入模型(Qt)