python 刷 leetcode 题目(21)

191位1的个数

编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。

示例 :

输入: 11
输出: 3
解释: 整数 11 的二进制表示为 00000000000000000000000000001011

示例 2:

输入: 128
输出: 1
解释: 整数 128 的二进制表示为 00000000000000000000000010000000

思路: 本题可以转化为一个进制转换的题目,如果有时间可以看看我的前一篇博客进制转换,十进制转任意进制。

代码如下:

class Solution(object):
    def hammingWeight(self, n):
        """
        :type n: int
        :rtype: int
        """
        count = 0
        while True:
            if n == 0:
                break
            n, mod = divmod(n, 2)
            if mod == 1:
                count += 1
        return count
            

461汉明距离

两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。

给出两个整数 x 和 y,计算它们之间的汉明距离。

注意:
0 ≤ xy < 231.

示例:

输入: x = 1, y = 4

输出: 2

解释:
1   (0 0 0 1)
4   (0 1 0 0)
       ↑   ↑

上面的箭头指出了对应二进制位不同的位置。

思路:跟上面那个题很类似,具体看代码

代码如下:

class Solution(object):
    def hammingDistance(self, x, y):
        """
        :type x: int
        :type y: int
        :rtype: int
        """
        count = 0
        while True:
            if x == 0 and y == 0:
                break
            x, x_mod = divmod(x, 2)
            y, y_mod = divmod(y, 2)
            if x_mod != y_mod:
                count += 1
        return count
        
互相学习,互相指教

猜你喜欢

转载自blog.csdn.net/annilingmo/article/details/80648465