131. 分割回文串
回溯法思考的步骤:
1、画递归树;
2、根据自己画的递归树编码。
python中判断回文字符串最简单的写法:
s[:i] == s[:i][::-1]:
134. 加油站
自己的代码的问题在于遇到一个可以出发到下一站的点,就一直遍历到无法继续前进,而如果遍历到无法前进却也没有返回起始点,说明这一路遍历的所有点都不可能返回
起始点,但是自己的代码下一次出发还是仅看能否可以到达下一个点,而不是考虑上次遍历的情况,直接从上次遍历的终点出发
说白了,从某点开始出发,到达不了的点才有可能是真正的出发点,直接从改点重新出发即可
对于这种题,只能多做才能发现巧妙的构思吧
136. 只出现一次的数字
玛德,根本想不到
解析:
交换律:a ^ b ^ c <=> a ^ c ^ b
任何数于0异或为任何数 0 ^ n => n
相同的数异或为0: n ^ n => 0
2 ^ 3 ^ 2 ^ 4 ^ 4等价于 2 ^ 2 ^ 4 ^ 4 ^ 3 => 0 ^ 0 ^3 => 3
137. 只出现一次的数字 II
从数电的角度来分析
138. 复制带随机指针的链表
最近的题都好难啊
自己开始的思路:
思路:
1.遍历链表,第一遍根据next建立新链表,第二遍补上random,但是发现补上random的时候,random不知道连到那里
除非用双循环,在第二遍补上random的时候不断遍历原链表和新链表
一种特别巧妙的方法:
遍历链表两次:
第一遍:把每个新生成的结点放在对应的旧结点后面, 形如: 1->1'->2->2'->3->3'->4->4'->null。
第二遍:修改每个新结点的 next 指针和 random 指针。
https://leetcode-cn.com/problems/copy-list-with-random-pointer/solution/python-zhan-sheng-9883o1kong-jian-fu-za-du-liang-b/