[问题] 关于if else statement

楼主: benchen0812 (あBen)   2018-06-27 10:37:44
第一次发文
如果有那里不妥当请告知
最近在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
但是好像不太对
请问有人可以跟我说明一下吗?
非常感谢!
作者: djshen (djshen)   2018-06-27 11:20:00
else是跟着for的
作者: jlhc (H)   2018-06-28 01:17:00
for正常结束后会做else的内容
作者: windclara (null)   2018-06-28 11:14:00
FOR-ELSE,好像是Python特有的 @@
作者: cphe (魔鬼藏在垃圾筒里)   2018-06-28 14:10:00
else是跟着for,看缩排比较好懂~ for完整跑完就会执行else通常是用来判断是否有中离(?这题不暴力解就是利用xor的特性,a^b=c则 a^c=b,c是预期最大值,再判断做完xor后b是否在set里面,没有该bit设为零简单来说就是每个bit扫一次,由高位元到低位元跑32次你问的 else: ans -= 1就代表不在set中,要把前面加1减回来
楼主: benchen0812 (あBen)   2018-06-28 23:16:00
感谢说明!!

Links booklink

Contact Us: admin [ a t ] ucptt.com