Day25|组合板子|216. 组合总和 III| 17. 电话号码的字母组合
组合板子+剪枝
- 216. 组合总和 III
- 剪枝操作?
- 17. 电话号码的字母组合
216. 组合总和 III
class Solution {private:vector<int>temp;vector<vector<int>>result;//sum 存和,index为回溯提供下标void backtracking(int k,int n,int sum,int index){if(temp.size() == k)//判断一维数组的个数是否等于k{if(sum == n ) //等于所求值 存入,佛则返回上一层;{result.push_back(temp);}return; //如果不符合要求,返回上一层}for(int i=index;i<=9;i++)//无剪枝版(第一次1~9种情况){sum+=i;//和值改变temp.push_back(i);//存入ibacktracking(k,n,sum,i+1);//i+1让范围向后推1 例如2~9sum-=i;//回溯过程temp.pop_back();}}
public:vector<vector<int>> combinationSum3(int k, int n) {backtracking(k,n,0,1);return result;}
};
剪枝操作?
1.想想如果sum已经超过了,目标值但此时一维数组个数还没有达到k
我们直接return上一层!
2.如果我们不能让一维数组的个数到k,我们是不是直接把这个分支剪掉,避免非必要循环!
例如:我们要求 k=2,但是递归到 9已经没有意义!
k=3,我们递归到7就可以,{7.8.9}后面已经没有必要了去递归了,因为怎么递归都满足不了size=k;
所以怎么递归?
我们把9-(k-size)//假设k=2,第一次size=0所以9-(2-0)=7,我们要递归到8,所以9-(k-size)+1
假设k=3,9-(k-size)+1=7,第一次正好遍历到7
第二次size已经+1,则9-(k-size)+1=8,则8,同理下一次为9,所以遍历为{7,8,9}
class Solution {private:vector<int>temp;vector<vector<int>>result;//sum 存和,index为回溯提供下标void backtracking(int k,int n,int sum,int index){if(sum>n) return;if(temp.size() == k)//判断一维数组的个数是否等于k{if(sum == n ) //等于所求值 存入,佛则返回上一层;{result.push_back(temp);}return; //如果不符合要求,返回上一层}for(int i=index;i<=9-(k-temp.size())+1;i++)//无剪枝版(第一次1~9种情况){sum+=i;//和值改变temp.push_back(i);//存入ibacktracking(k,n,sum,i+1);//i+1让范围向后推1 例如2~9sum-=i;//回溯过程temp.pop_back();}}
public:vector<vector<int>> combinationSum3(int k, int n) {backtracking(k,n,0,1);return result;}
};
17. 电话号码的字母组合
class Solution {private:const string keys[10] = {"", // 0"", // 1"abc", // 2"def", // 3"ghi", // 4"jkl", // 5"mno", // 6"pqrs", // 7"tuv", // 8"wxyz", // 9};string s;vector<string>result;//index 无比重要,它是确定到输入字符串数组遍历到哪里了!//"23",index=0,说明是2,index=1,说明是3void backtarcking(const string &digits,int index){if( index == digits.size())//index在“23”情况不是到1就行了吗?我们在“23”后面进入下一次index已经等于2了,直接return!而且回溯正确{result.push_back(s);return;}int stand=digits[index]-'0';//index妙用,stand可以实现9键的按键string tempS=keys[stand];//对应按键字符串!for(int i=0;i<tempS.size();i++){s.push_back(tempS[i]);backtarcking(digits,index+1);//index+1,移动到“3”;s.pop_back();//回溯}}
public:vector<string> letterCombinations(string digits) {if(digits.size()==0)return result; backtarcking(digits,0);//index为1return result;}
};
Day25|组合板子|216. 组合总和 III| 17. 电话号码的字母组合相关推荐
- 代码随想录算法训练营第24天25天|● 77. 组合● 216.组合总和III ● 17.电话号码的字母组合
77组合 看完题后的思路 void f(数组,startIndex) 递归终止 if(startIndex数组长度||path.sizek){ if(path.size==k){ 加入} } 递归 f ...
- day25|● 216.组合总和III ● 17.电话号码的字母组合
day25 3.13 回溯第二天 216.组合总和III 链接: 216.组合总和III 思路:本题k相当于树的深度,9(因为整个集合就是9个数)就是树的宽度. class Solution {pri ...
- Day25 LeetCode 216. 组合总和 III 17. 电话号码的字母组合
题目:216. 组合总和 III - 力扣(LeetCode) 思路: 1.递归函数参数和返回值:首先需要两个全局变量一维path数组和二维result数组,path数组用来收集路径上的元素,resu ...
- 攻克代码随想录Day25 | 216. 组合总和 III | 17. 电话号码的字母组合
216. 组合总和 III 在该题中,题目的整体思路与之前的77. 组合思路是相似的.但在本体中,我选择从1-9遍历每一种可能性.然后将与k相等的组合进行判定,若之和与n相等,则将其push进去,否则 ...
- 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 ...
- 216.组合总和III 17.电话号码的字母组合
216.组合总和III 回溯的常规思路做这道题: class Solution {List<List<Integer>> list = new ArrayList<> ...
- 代码随想录算法训练营第二十五天|216.组合总和III 17.电话号码的字母组合
目录 LeeCode 216.组合总和III LeeCode 17.电话号码的字母组合 LeeCode 216.组合总和III 216. 组合总和 III - 力扣(LeetCode) 思路:本题和 ...
- 代码随想录第25天|216.组合总和III ● 17.电话号码的字母组合
216.组合总和Ⅲ 回溯三部曲 确定递归函数参数 需要一维数组path来存放符合条件的结果,二维数组result来存放结果集. 接下来还需要如下参数: targetSum(int)目标和,也就是题目中 ...
最新文章
- Contos7 克隆实例 以及 配置网络-服务-等相关信息
- 201521123111《Java程序设计》第2周学习总结
- 如何为“选择”框创建占位符?
- C/C++ 之 C发展史及 各标准特性说明
- 复位 stm32_分析一个关于STM32 芯片异常复位的经典案例!
- html css实现登录注册页面,基于HTML5+css+JS_的精美登陆注册界面
- linux日志区别,你要了解的linux系统日志知识点都在这
- android获取各种系统路径的方法
- 春天:谁是最得意的诗人?
- const int * pi/int * const pi的区别
- Excel·VBA自定义函数扩展VLOOKUP
- C# Winfrom MQTT 客户端与服务器【代码】
- word转pdf实现,POIXMLDocumentPart.getPackageRelationship()Lorg...问题,以及NotOfficeXmlFileException...问题
- mac 修改vmware的NAT网关
- 计算机行业的最新技术,计算机行业发展空间巨大 三大必然趋势引领发展
- 网站歌曲播放器php,推荐漂亮的flash网页MP3音乐播放器
- 为什麽CMOS电路的输入端不准悬空,而TTL电路的输入端不准串接大电阻?
- unity检测范围内敌人_unity_小功能实现(敌人追踪主角)
- golang的图片操作:缩放图片+合成图片
- Lua学习笔记-OOP面向对象
热门文章
- Python——单线程与多线程
- python画函数图像-Python 绘制你想要的数学函数图形
- windows XP 安装Sql Server 2000企业管理器无法打开(MMC)的解决方法(亲试,可用)
- 红米4A全版本通刷_2016111 2016112_官方线刷包_救砖包_解账户锁
- Win11安卓子系统无法启动怎么办?安卓子系统启用虚拟机平台教程(确保在可选的Windows功能中启用虚拟机平台)
- 存储结构和磁盘划分(基于RedHat7)
- pytroch冻结某些层的常用方法
- Flutter列表ListView学习
- abl String方法
- 草图vr3.6许可证服务器安装失败,VRay3.6无法获得许可-200