我发现在python中,如果你使用bin
:
>>> bin(4)
'0b100'
>>> bin(-4)
'-0b100'
但如果你试试这个:
-4 >> 8 => -1
实际上,当右移3位以上时,答案总是-1
。我知道这是实现的东西,但我遇到了这个问题:
在以下数组中,找出仅出现一次的数字,而其他数字总是出现三次
[-2,-2,1,1,-3,1,-3,-3,-4,-2]
这是代码
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if nums == None:
return None
ans = 0
for i in range(32):
numOfI = 0
for num in nums:
if (( num >> i) & 1) == 1 :
numOfI += 1
numOfI %=3
print i,numOfI
if numOfI != 0:
ans = ans + (numOfI << i)
return ans
答案应为-4
,而是11111111111111111111111111111100
;我该如何将其转换为-4?
答案 0 :(得分:3)
使用int.from_bytes和int.to_bytes可以轻松完成Python上的位操作。
另一方面,使用x
类可以轻松解决“找出值Counter
次”的问题:
>>> from collections import Counter
>>> values = [-2,-2,1,1,-3,1,-3,-3,-4,-2]
>>> [value for value, count in Counter(values).items() if count == 1]
[-4]
使用from_bytes
和to_bytes
清晰可读,因此您不想尝试自行进行转换。
使用Counter
也比你的神秘实现更具可读性,但我的单行可能不是最易读的可想象版本,它仍然是单行并且更易于翻译。