代码随想录第二十五天|组合、电话号码的字母组合
代码随想录第二十五天|216、17不熟
- Leetcode 216. 组合总和 III
- Leetcode 17. 电话号码的字母组合
Leetcode 216. 组合总和 III
题目链接: 组合总和 III
自己的思路:这道题和组合很相似,应该可以做出来的,马虎好多变量写错了!
正确思路:这个题和组合问题不同的就是引入一个和的问题,所以递归函数传入参数会多一个sum参数,在最后加入path的时候要进行判断一个,满足和的条件就加入到结果中;剪枝操作会多一个,因为有一个和的问题,当当前的和大于n的时候,直接return就行了;回溯三部曲:1、传入参数:k、n、startindex和sum;2、终止条件:当sum大于n的时候,直接返回;当path的数组大小等于k而且sum等于n的时候,加入到res中;3、单层逻辑:先将i加入到path中,然后给sum加上i,然后递归,然后回溯,将i从path中拿出来,并且sum减i!!!!
代码:
class Solution {List<List<Integer>> res = new ArrayList<>();LinkedList<Integer> path = new LinkedList<>();public List<List<Integer>> combinationSum3(int k, int n) {backtracking(k,n,0,1);return res;}public void backtracking(int k,int n,int sum,int startindex){//剪枝if (sum>n) return;if (path.size()==k){//符合条件就加入if (sum==n){res.add(new ArrayList(path));}return;}//剪枝,和组合问题一样for (int i=startindex;i<=9-(k-path.size())+1;i++){path.add(i);sum+=i;backtracking(k,n,sum,i+1);path.removeLast();sum-=i;}}
}
复杂度分析:
时间复杂度: O ( n ) \mathcal{O}(n) O(n)
空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)
Leetcode 17. 电话号码的字母组合
题目链接: 电话号码的字母组合
自己的思路:感觉还是自己太懒了,不想思考,只想看题解,然后背思路,要改掉,要改掉!!!!!!其实感觉不是那么难,就是自己不想思考!!!
正确思路:这个题和之前的组合问题的区别在于现在是好几个集合,现在就不用在乎重复的问题了;我们首先要用数组或者哈希表来映射一下手机上的键值对,方便后面从中取元素;我们还要定义一个StringBuilder,因为它在字符串拼接的时候效率比较高;回溯三部曲:1、传入参数:初始字符串以及定义一个表示所指向字符串位置的指针;2、终止条件:当这个指针超出字符串的索引了,把当前字符加进去,然后返回;3、单层逻辑:先找到当前字符串中字符在map中映射的字符串,然后遍历该字符串,先加入当前字符串中字符,然后递归,然后回溯即可!!!
代码:
class Solution {List<String> res = new ArrayList<>();StringBuilder temp = new StringBuilder();String[] map = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};public List<String> letterCombinations(String digits) {if (digits==null||digits.length()==0)return res;backtracking(digits,0);return res;}public void backtracking(String digits,int index){//当指向字符串后面一个地方的时候终止if (index==digits.length()){res.add(temp.toString());return;}int in = digits.charAt(index)-'0';String letter = map[in];for (int i =0;i<letter.length();i++){temp.append(letter.charAt(i));backtracking(digits,index+1);//删除最后一个字符temp.deleteCharAt(temp.length()-1);}}
}
复杂度分析:
时间复杂度: O ( n ) \mathcal{O}(n) O(n)
空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)
代码随想录第二十五天|组合、电话号码的字母组合相关推荐
- 代码随想录 第二十四天 17.电话号码的字母组合||216.组合总和III
216.组合总和III 力扣题目链接(opens new window) 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. 说明: ...
- 代码随想录第二十五天|261.组合总和、17.电话号码的字母组合
261.组合总和 找出所有相加之和为 n 的 k 个数的组合.组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字. class Solution { private:vector& ...
- 【正点原子STM32连载】 第二十五章 TFTLCD(MCU屏)实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...
- 【正点原子MP157连载】第二十五章 pinctrl和gpio子系统实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...
- 【正点原子STM32连载】 第二十五章 TFT-LCD(MCU屏)实验 摘自【正点原子】STM32F103 战舰开发指南V1.2
1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420 3)全套实验源码+手册+视 ...
- 25 linux ndk 头文件_正点原子Linux第二十五章RTC实时时钟实验
1)资料下载:点击资料即可下载 2)对正点原子Linux感兴趣的同学可以加群讨论:935446741 3)关注正点原子公众号,获取最新资料更新 第二十五章RTC实时时钟实验 实时时钟是很常用的一个外设 ...
- 第二十五章补充内容 5 不能为0的变量
// 第二十五章补充内容 5 不能为0的变量 /*#define DEBUG #include <iostream> #include <string> using names ...
- 求二叉树高度_LeetCode刷题——第二十五天(平衡二叉树)
这段时间跟二叉树杠上了,接下来还有许多二叉树的题目,虽然已经做了不少了,大多题目都涉及到了递归,也挺好,刚好有机会练习一下递归,但是遇到新的题目还是有点力不从心,还需要看参考答案,真希望有一天像汤神一 ...
- NeHe OpenGL第二十五课:变形
NeHe OpenGL第二十五课:变形 变形和从文件中加载3D物体: 在这一课中,你将学会如何从文件加载3D模型,并且平滑的从一个模型变换为另一个模型. 欢迎来到这激动人心的一课,在这一课里,我们 ...
最新文章
- 17个Python小窍门
- virtualbox centos5 分辨率_一种高分辨率、高帧率的LCoS显示芯片设计方法
- Java NIO与IO的区别和比较
- calcBackProject函数(搜索小物体的位置)
- Transformer入门篇-深度万字长文带你轻松入门深度学习框架
- Hiv:SQuirrel连接hive配置
- 软件测试基础课程学习笔记4--测试用例设计方法技巧
- python打开autocad软件_python 使用pyautocad操作AutoCAD
- Exchange Server 2016管理系列课件17.创建和使用会议室邮箱
- Portal: 强叔侃墙
- IE和ff下javascript解释的区别
- C语言关键字必备练习题
- 深度学习——人生为数不多的好出路
- [链接汇总]在用Matlab解微分方程时比较有用
- php执行fastlane,Fastlane使用说明 自动化打包
- [观点]中国传统文化的遗失清单上我们丢掉了什么(作者:侯虹斌)
- 有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数。
- html验证码图片,js+h5 canvas实现图片验证码
- 业务流程巡检拨测(开源工具)
- 微信小程序-后台使用富文本编辑器返回数据,小程序编译富文本编辑器返回的数据