[問題] 關於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