- Hamming Distance
思路:比较两个数的二进制数形式里面的比特数不同的位数有多少位
【Ours】
class Solution(object):
def hammingDistance(self, x, y):
"""
:type x: int
:type y: int
:rtype: int
"""
distance = 0
shang1,shang2 = x,y
while shang1 or shang2:
[shang1,yu1] = divmod(shang1,2)
[shang2,yu2] = divmod(shang2,2)
if yu1 != yu2:
distance += 1
return distance
【简洁版】
^ 按位异或运算符:当两对应的二进位相异时,结果为1
bin() 返回一个整数 int 或者长整数 long int 的二进制表示。
count() 方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。
def hammingDistance(self, x, y):
"""
:type x: int
:type y: int
:rtype: int
"""
return bin(x^y).count('1')
- Self Dividing Numbers
思路:判断数字能否整除他每一位上的数字。
- all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否不为 0、''、False 或者 iterable 为空,如果是返回 True,否则返回 False。
- filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给is函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
class Solution(object):
def selfDividingNumbers(self, left, right):
is_self_dividing = lambda num: '0' not in str(num) and all([num % int(digit) == 0 for digit in str(num)])
return filter(is_self_dividing, range(left, right + 1))
class Solution(object):
def selfDividingNumbers(self, left, right):
"""
:type left: int
:type right: int
:rtype: List[int]
"""
a = []
for i in range(left,right+1):
if '0' not in str(i) and all(i% int(j) == 0 for j in str(i)):
a.append(i)
return a