39.组合总和
我们的回溯会把当前元素和后面的元素所有可能都尝试一遍,而组合不强调顺序性,这就是为什么组合中其后的元素没有必要往前看
17.电话号码的字母组合
在完成《77.组合》基础上,这道题你要会两个技能,分别是建立映射关系(通常是数组)和单个数字字符转换为对应的整数(ch - '0')
218.组合III
在完成《77.组合》基础上,这道题无外乎增加一个额外的条件,即需要 path 中数的总和为 n,其中限制元素个数为 k
77.组合
组合不在意顺序,因此 [1,4] 和 [4,1] 属于同一个路径,不能同时加入到总路径中,只能取其一。为了方便,按照有序进行排布会容易做题,在代码中也是通过 i + 1 传递 到 backtrace 中作为 start 参数,表示遍历路径的起始位置
8. 字符串转换整数 (atoi)
如果再给我一次做此题的机会,绝对不想再碰。逻辑上要考虑的太多,以至于容易逻辑混乱,但真要说此题的技巧,那一定是及时阻止无效数字的转换,即检测到超过范围就到处理返回值的阶段了。
66.加一
这道题容易让人误解,应该把题意讲得清楚些。有一个自然数,被拆分成个位数存储在数组中,对这个自然数进行加 1 操作。很明显,如果我们的自然是99,那么加 1 的结果就是 100,显然原数组是存储不下的,因为vector容器不支持头部插入元素
26.删除有序数组中的重复项
双指针法,right 用于指向更新值的下标,left 用于比较是否重复
19.删除链表的倒数第 N 个结点
只要明白链表的特性,以及删除的特点就很容易想到该怎么处理这道题,不会想复杂
2.两数相加
关于进位的处理,这并不难,只需要用一个标记位 note 来标识是否有进位,还有要记得正确更新 note 的情况
143.重排链表
这道题只要能够把题目看明白,即它究竟是如何重排,逻辑上理清楚并不难
14567