201
题目描述:
给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点)。
示例:
解答:
class Solution:
def rangeBitwiseAnd(self, m: int, n: int) -> int:
'''
0 与谁与都为 0
因为 只要有一个0,那么无论有多少个 1都是 0
比如:从 5到 7
5:0 1 0 1
6:0 1 1 0
7:0 1 1 1
-----------
0 1 0 0
代码如下:
i=0
while m!=n:
m>>=1
n>>=1
i+=1
return m<<i
'''
while n>m:
n&=(n-1)
return n
231
题目描述:
给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
示例:
解答:
class Solution:
def isPowerOfTwo(self, n: int) -> bool:
#位运算
if n<=0:
return False
if (n&n-1)==0:
return True
return False
268
题目描述:
给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。
示例:
解答:
class Solution:
def missingNumber(self, nums: List[int]) -> int:
#异或抵消 1^1^2^2^3 = 3
res=len(nums)
for i in range(len(nums)):
res^=nums[i]
res^=i
return res
338
题目描述:
给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。
示例:
解答:
class Solution:
def countBits(self, num: int) -> List[int]:
"""
1: 0001 3: 0011 0: 0000
2: 0010 6: 0110 1: 0001
4: 0100 12: 1100 2: 0010
8: 1000 24: 11000 3: 0011
16:10000 48: 110000 4: 0100
32:100000 96: 1100000 5: 0101
由上可见:
1、如果 i 为偶数,那么f(i) = f(i/2) ,因为 i/2 本质上是i的二进制左移一位,低位补零,所以1的数量不变。
2、如果 i 为奇数,那么f(i) = f(i - 1) + 1, 因为如果i为奇数,那么 i - 1必定为偶数,而偶数的二进制最低位一定是0,
那么该偶数 +1 后最低位变为1且不会进位,所以奇数比它上一个偶数bit上多一个1,即 f(i) = f(i - 1) + 1。
:type num: int
:rtype: List[int]
"""
ret=[0]
for i in range(1,num+1):
if i%2==0:
ret.append(ret[i//2])
else:
ret.append(ret[i-1]+1)
return ret
371
题目描述:
不使用运算符 + 和 - ,计算两整数 a 、b 之和。
示例:
解答:
class Solution:
def getSum(self, a: int, b: int) -> int:
return sum([a,b])