作者benchen0812 (あBen)
看板Python
标题[问题] 关於if else statement
时间Wed Jun 27 10:37:44 2018
第一次发文
如果有那里不妥当请告知
最近在LEETCODE刷提 遇到一题求 list 里面任意两数字XOR最大值
题目连结在这边
https://goo.gl/HPH4Sm
这题最快的解答是
class Solution:
def findMaximumXOR(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
ans = 0
for bit in range(31, -1, -1) :
ans = (ans << 1) + 1
pre = set()
for n in nums :
p = (n >> bit) & ans
if p in pre : #1
break #2
pre.add(ans - p) #3
else : #4
ans -= 1
return ans
我的问题在我标#1-4的地方
我不太明白这边的if else statement 怎麽运作的(特别是#4)
一开始我以为是当if p not in pre:
就会直接跳到#4
但是好像不太对
请问有人可以跟我说明一下吗?
非常感谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 174.55.55.170
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1530067068.A.3E3.html
1F:→ djshen: else是跟着for的 06/27 11:20
2F:推 jlhc: for正常结束後会做else的内容 06/28 01:17
3F:推 windclara: FOR-ELSE,好像是Python特有的 @@ 06/28 11:14
4F:推 cphe: else是跟着for,看缩排比较好懂~ for完整跑完就会执行else 06/28 14:10
5F:→ cphe: 通常是用来判断是否有中离(? 06/28 14:10
6F:→ cphe: 这题不暴力解就是利用xor的特性,a^b=c则 a^c=b,c是预期最 06/28 14:12
7F:→ cphe: 大值,再判断做完xor後b是否在set里面,没有该bit设为零 06/28 14:13
8F:→ cphe: 简单来说就是每个bit扫一次,由高位元到低位元跑32次 06/28 14:13
9F:→ cphe: 你问的 else: ans -= 1就代表不在set中,要把前面加1减回来 06/28 14:14
10F:→ benchen0812: 感谢说明!! 06/28 23:16