Re: [閒聊] 每日leetcode

看板Marginalman作者 (溫水佳樹的兄長大人)時間10月前 (2025/01/15 18:11), 編輯推噓2(201)
留言3則, 3人參與, 10月前最新討論串1281/1552 (看更多)
※ 引述 《Meaverzt (單推凜寶)》 之銘言: :   : 題目: :   : 有兩個數字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) :   : 位元運算太難了 :   : 只想的出用字串的 :   : 肥肥就這樣了 思路: 差不多 都不是位運算 轉成字符一個一個算 先把高位變成1 有多的1就從低位開始改成1 python code: class Solution: def minimizeXor(self, num1: int, num2: int) -> int: l = bin(num2).count("1") num1 = bin(num1)[2:] result = ["0"] * len(num1) for i in range(len(num1)): if l == 0: break if num1[i] == "1": result[i] = "1" l -=1 for i in range(len(result)-1,-1,-1): if l == 0: break if result[i] == "0": result[i] = "1" l -=1 return int("".join(result),2) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.137.251.232 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1736935908.A.3BC.html

01/15 18:19, 10月前 , 1F
我好崇拜你
01/15 18:19, 1F

01/15 18:24, 10月前 , 2F
你一年每日
01/15 18:24, 2F

01/15 18:31, 10月前 , 3F
別卷了
01/15 18:31, 3F
文章代碼(AID): #1dXudaEy (Marginalman)
討論串 (同標題文章)
文章代碼(AID): #1dXudaEy (Marginalman)