两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目。
给你两个整数 x
和 y
,计算并返回它们之间的汉明距离。
从题目出发,可以转化为两个整数异或后有多少位1,也就是转化为二进制整数中有多少位1。可以利用位运算n&(n-1)移除最低位1以计算1的个数。
代码参考:
class Solution:
def hammingDistance(self, x: int, y: int) -> int:
l = x^y
d = 0
while l:
d += 1
l = l & (l-1)
return d
全排列问题:
给定一个不含重复数字的数组 nums
,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
类似地,直接递归地空间开销比较大,可以采用回溯法,构造树形结构,选定一个值,遍历其他元素组合,如下图:
代码参考:
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
res = []
def backtrack(nums,tmp):
if not nums:
res.append(tmp)
return #递归的结束要有return
for i in range(len(nums)):
tmp.append(nums[i])#选定nums第i个值
backtrack(nums[:i]+nums[i+1:], list(tmp))#遍历除第i个元素外的其他元素
tmp.pop()#回溯
backtrack(nums,[])
return res