Re: [閒聊] 每日leetcode

看板Marginalman作者 (單推凜寶)時間10月前 (2025/01/15 14:16), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1280/1552 (看更多)
題目: 有兩個數字num1跟num2 我們要找出符合兩個條件的一個x 1.x 的binary representation 中的1要跟num2一樣多 2.x跟num1 xor後的值要最小 思路: 為了讓xor後的值高位數的1越少越好 在高位數的num1是1 x就要是1 是0 x就要是0 所以一開始先數num2裡面有幾個1設做num 從num1的高位遍歷到低位 在num>0的情況下只要遇到1答案的這位就填1 如果全部的1都填完了 num還是>0 那就從低位到高位再遍歷一次num1 遇到0的時候填1保持xor後的值最小直到num=0 最後把結果轉回整數就是答案了 Code: class Solution(object): def minimizeXor(self, num1, num2): num1,num2=bin(num1)[2:],bin(num2)[2:] if len(num1)<len(num2): num1=(len(num2)-len(num1))*'0'+num1 ans=['0' for i in num1] num=0 for i in num2: if i=='1': num+=1 for i in range(len(num1)): if num1[i]=='1' and num>0: num-=1 ans[i]='1' for i in range(len(num1)-1,-1,-1): if num1[i]=='0' and num>0: num-=1 ans[i]='1' return int(''.join(ans),2) 位元運算太難了 只想的出用字串的 肥肥就這樣了 -- https://i.imgur.com/5XtXJd3.jpeg
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.237.24.143 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1736921762.A.6CD.html
文章代碼(AID): #1dXrAYRD (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1dXrAYRD (Marginalman)