想着总结一下做过的题目,感觉我之前的学习也没有那么认真......果然兴趣是最好老师。
也可以照着这里的提示不看他人代码,自己做题试试。
收获里写的是目前获得的一些小感悟,也许还有其他用法暂时就没写了。
题目1:两数之和
解法: 暴力解法就不说了,要想运行的快得加入字典。
收获:
index :获取指定值的索引,如果有重复的就是第一个
enumerate:获得列表里值的索引及位置
get:根据值获得字典里该键对应的值
哈希表的做法和先for循环创建字典本质上区别不大,但是应该会快一点。
写到这里的时候,我发现自己目前做的题目也可以用get简化,收获不小~~
题目2:整数反转
解法: 思路一般是传统的取余再移位,也可以转换成字符串[::-1]逆序输出。
收获:
常规操作,直接得到逆序后的数字:
temp = 0
while x != 0:
temp = temp*10 + x%10
x = int(x/10)
[::-1]:字符串逆序
abs():取绝对值
题目3:回文数
解法: 根据规则可以率先排除负数,之后我是按照字符串逆序前后是否相等做的。
看了进阶要求后用上文那个小循环改了一下
收获:
用逆序前后是否相等判断回文
解法: 原思路是把六种单独情况列出,之后发现可以通过对应值来判断是否加上还是减去。
收获:
做这道题的时候感觉自己很聪明,知道啥时候前进一步啥时候前进两步。
后面看了大神用字典,根据键对应的值来寻找规律,真的跪了。
解法:可以傻瓜式做法也能利用min和max函数排序后计算
收获:
这里需要考虑的情况很多,千万不能盲目开始
min和max函数:这个比较神奇,马上把我们要处理的列表里的字符串缩减成两个
解法: 利用replace函数一层层剥开、利用堆栈
收获:
今天回顾的时候发现:s_new =s.replace('()', '').replace('[]', '').replace('{}', '')
这句代码运行:{[()]} 这种符号时一步就能转换成空字符串,
运行([{}])的时候一步转换成([])还是有一个顺序区别的
利用在堆栈底部放入元素可以很方便地判断是否发生错误
解法:最关键的是原地修改,用双指针法把后面和它不相等的元素一个个提到前面来。
收获:
用set可以去重,双指针法
题目8:移除元素
解法: 原地修改,还是利用双指针法。
收获:
for循环里的if,当我们找到满足我们目标的值的时候再进行操作,紧盯目标。
解法: 用Python可以直接判断给出的字符串是否在被搜索的字符串中。
收获:
Python直接判断字符串的存在可以直接用index函数返回第一个出现该字符串的位置索引
解法: 循环遍历或者二分法
收获:
对边界的处理
取中点的方式:mid = int(left + (right-left)/2) 比较保险
之后会10天一总结,总结和做题重要性不相上下。之前上学的时候也不重视这一块,吃了不少亏吧,吃一堑长一智,关键还是坚持。