一、知识点介绍
1.原码、反码和补码
2.按位非操作 ~
3.按位与操作 &
A&~A=0
A&~0=A
4.按位或操作 |
5.按位异或操作 ^
性质:满足交换律和结合律
A^A=0
A^0=A
6.按位左移操作 <<
7.按位右移操作 >>
二、例题
1. 只出现一次的数字
class Solution:
def singleNumber(self, nums: List[int]) -> int:
for i in range(1,len(nums)):
nums[0]^=nums[i]
return nums[0]
2. 只出现一次的数字 III
class Solution:
def singleNumber(self, nums: List[int]) -> List[int]:
diff=0
for i in nums:
diff^=i
diff&=-1*diff
num1=num2=0
for i in nums:
if i&diff:
num1^=i
else:
num2^=i
return [num1,num2]
3. 2 的幂
class Solution:
def isPowerOfTwo(self, n: int) -> bool:
return n>0 and n&(n-1)==0
4. 只出现一次的数字 II
数字电路基础
class Solution:
def singleNumber(self, nums: List[int]) -> int:
a=b=0
for x in nums:
b=(b^x)&~a
a=(a^x)&~b
return b
5. 子集
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
n=len(nums)
ans=[]
for mask in range(2**n):
tmp=[]
for i in range(n):
if mask&(1<<i)>0:
tmp.append(nums[i])
ans.append(tmp)
return ans