1. 我怎么也没想到,他还能打一样的。
    • 输入的数字的顺序能变,开始在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.电话号码的组合相关推荐

  1. Leetcode 17.电话号码的组合(回溯法)

    Time: 20191005 Type: Medium 题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字 ...

  2. day21|216.组合总和III、17.电话号码的字母组合

    216.组合总和III 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9 每个数字 最多使用一次 返回所有可能的有效组合的列表 .该列表不能包含相同的组合两次,组合可以以 ...

  3. Day25|组合板子|216. 组合总和 III| 17. 电话号码的字母组合

    组合板子+剪枝 216. 组合总和 III 剪枝操作? 17. 电话号码的字母组合 216. 组合总和 III class Solution {private:vector<int>tem ...

  4. LeetCode 216组合总和III 17电话号码的字母组合

    文章目录 216组合总和III c++ 代码实现 python 代码实现 17.电话号码的字母组合 c++ 代码实现 python代码实现 216组合总和III 找出所有相加之和为 n 的 k 个数的 ...

  5. day29 | 216.组合总和III 17.电话号码的字母组合

    文章目录 216.组合总和III 1.代码(AC) 2.分析 17.电话号码的字母组合 1.代码 2.分析 216.组合总和III 1.代码(AC) class Solution {List<L ...

  6. Day25 LeetCode 216. 组合总和 III 17. 电话号码的字母组合

    题目:216. 组合总和 III - 力扣(LeetCode) 思路: 1.递归函数参数和返回值:首先需要两个全局变量一维path数组和二维result数组,path数组用来收集路径上的元素,resu ...

  7. 216.组合总和III 17.电话号码的字母组合

    216.组合总和III 回溯的常规思路做这道题: class Solution {List<List<Integer>> list = new ArrayList<> ...

  8. Suzy找到实习了吗Day25 | 回溯算法进行时:216. 组合总和 III,17电话号码

    216. 组合总和 III 题目 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9 每个数字 最多使用一次 返回 所有可能的有效组合的列表 .该列表不能包含相同的组合两次 ...

  9. day25|● 216.组合总和III ● 17.电话号码的字母组合

    day25 3.13 回溯第二天 216.组合总和III 链接: 216.组合总和III 思路:本题k相当于树的深度,9(因为整个集合就是9个数)就是树的宽度. class Solution {pri ...

最新文章

  1. Elastic Job从单点到高可用、同城主备、同城双活
  2. ajax提交到mysql_利用ajax的方式来提交数据到后台数据库及交互功能
  3. mysql count 类型_MYSQL的COUNT函数
  4. spring-session用mysql实现session共享实践
  5. linux复制duo文件,自动生成Linux下Makefile全攻略(转)
  6. c# winform窗口自适应各种分辨率类
  7. RocketMQ实战系列-RocketMQ命令详解
  8. 解决pytorch CrossEntropyLoss报错RuntimeError: 1D target tensor expected, multi-target not supported
  9. 王道机试指南读后总结-1
  10. Aurelia – 模块化,简单,可测试的 JS 框架
  11. pythoncde-实战1--坐标生成
  12. 以非泛型方式调用泛型方法
  13. Android中加载ETC2压缩格式(PKM后缀)纹理
  14. 产品原型图设计Axure教程-CSDN就业班-专题视频课程
  15. 1.爬虫系统学习--爬虫应知知识(后续还会更新)
  16. 计算机并口回路测试工具,COM口和LPT口回路环的制作与CheckIT3.0测试方法
  17. Qt之QTableView的简单使用(含源码+注释)
  18. uniapp -nvue 轮播图与背景图的淡入淡出效果
  19. [c#]删除PDF权限密码
  20. assimp批量转模型,[OpenGL] 使用Assimp导入模型(Qt)

热门文章

  1. AXM-Net:用于行人检测的跨模式上下文注意力网络
  2. 【OpenCV 4开发详解】中值滤波
  3. 【T07】不要低估tcp的性能
  4. 138.ssm 框架下 导出Excel
  5. 关于android设备唯一区分device id的取得
  6. Session和几种状态保持方案理解
  7. Javascript全局变量和delete
  8. Python知识:实用程序模块基础——OS模块
  9. android荧光进度条,CSS3 彩色荧光棒进度条
  10. java在线编程题_阿里笔试题(2017在线编程题)-- 数串分组 --Java实现