Re: [閒聊] 每日leetcode

作者: Meaverzt (Meaverzt)   2025-01-15 14:16:00
題目:
有兩個數字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)
位元運算太難了
只想的出用字串的
肥肥就這樣了

Links booklink

Contact Us: admin [ a t ] ucptt.com