https://leetcode.cn/circle/discuss/CaOJ45/
給你一個長度為 n
的質數陣列 nums
。你的任務是返回一個長度為 n
的陣列 ans
,對於每個下標 i
,以下 條件 均成立:
ans[i] OR (ans[i] + 1) == nums[i]
除此以外,你需要 最小化 結果陣列裡每一個 ans[i]
。
如果沒法找到符合 條件 的 ans[i]
,那麼 ans[i] = -1
。
質數 指的是一個大於 1 的自然數,且它只有 1 和自己兩個因數。
class Solution: def minBitwiseArray(self, nums: List[int]) -> List[int]: # 二進位制把最右邊的0的右邊的1改成0 # 先取反 # 取到lowbit->最右邊的0 該位置為1,其餘全0 # 右移1位 -> 最右邊的0的右邊的1,該位置為1,其餘全0 # 異或運算,把1改成0 for i,x in enumerate(nums): if x==2: nums[i]=-1 else: t = ~x nums[i] = nums[i]^((t&-t)>>1) return nums