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、根据自己画的递归树编码。

image.png

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

Picture1.png

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/
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值