今日总结:做题效果不是很好,出现各种状况。感觉不是很难的题,就是陷入思维误区。还有两道题(18,22),暂且搁置。有点窝火,再努力吧。
16. 最接近的三数之和(C)
分析:跟之前的题很相识,一个求和,这个是求近似。直观想法还是老套路,排序,然后遍历,比较。
方法一:排序遍历比较,注意下,近似使用abs求绝对值。
1 | class Solution: |
方法二:优化运算时间,想法就是优先考虑两端情况,最大最小。然后其余情况正常,最后将结果。绝对值排序。选出最优。
1 | class Solution: |
17. 电话号码的字母组合(C)
分析:每个数字列出对应字母,先读一个数字放入列表。再依次拼接。
1 | class Solution: |
优化后(A)。yield生成器返回结果。学习到了。还有函数构造这个也很巧妙。
1 | class Solution: |
18. 四数之和(C)(暂)
分析:emmm~四数之和来了,首先考虑顺着三数之和的思路,4个指针,固定两个数。两个数往中间逼近。考虑可能存在多种情况,需要加一条判断。双嵌套复杂度太高了,直接借鉴优化代码。
(A)可以通过递归解决n个数之和。
- 考虑将n数之和降低为一个数加上n-1数之和
- 分化为二数之和
- target = target - nums[i]来调用nSum()方法。递归
- 注意列表的拼接。
1 | class Solution: |
20. 有效的括号(D)
分析:字符串问题,很好实现。
第一种,利用replace直接替换。不需要考虑其他位置。
1 | class Solution: |
第二种,利用堆栈的方式,匹配之后用pop删除。
1 | class Solution: |
22. 括号生成(B)(暂)
分析:跟20题逻辑相逆。
方法1:暴力法,生成所有括号序列,再判断是否有效。数目够就匹配()是否是对应的。如果,出现)在前,直接返回结果。正好相等时,判断返回True。然后添加。
1 | class Solution: |
方法二?(A):递归生成有效序列。方法二为什么就递归了。知识漏洞!
1 | class Solution: |