力扣
leetcode Writeup Record
155.最小栈
采用 pair 只需一个栈;加入元素就与 top 元素 进行 min 求值,就能保证当前 元素记录着对应 栈的最小元素
20.有效的括号
栈 适合解决对称性问题,这也是栈的一个特点
40.组合总和 II
前面做的组合题,不管强调与否,数组中的元素都是没有重复的,但这道题恰恰相反。看来只要解决重复元素可能带来的问题就可以了。我们就用一个布尔值 note 标记,如果 note 为 false 表明在同一层(同一个栈),否则在不同层(不同栈)。同层的元素相同可被忽略,不同层的元素相同不可被忽略
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 用于比较是否重复