leetcode感悟131-140

131. 分割回文串

https://leetcode-cn.com/problems/palindrome-partitioning/solution/hui-su-you-hua-jia-liao-dong-tai-gui-hua-by-liweiw/

回溯法思考的步骤:

1、画递归树;

2、根据自己画的递归树编码。

leetcode感悟131-140_第1张图片

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

leetcode感悟131-140_第2张图片

https://leetcode-cn.com/problems/single-number-ii/solution/luo-ji-dian-lu-jiao-du-xiang-xi-fen-xi-gai-ti-si-l/

从数电的角度来分析

 

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/
 

 

你可能感兴趣的:(数据结构与算法,python,leetcode)