Day23

  1. 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')

  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 

你可能感兴趣的:(Day23)