leedcode-比特位计数

自己写的:

from typing import List
class Solution:
    def countBits(self, n: int) -> List[int]:
        # 创建一个空列表来存储结果
        result = []

        # 循环遍历从0到n的所有数字
        for i in range(n + 1):
            # 将当前数字转换为二进制表示形式
            binary_num = bin(i)

            # 计算当前数字的二进制表示中 1 的个数
            count = binary_num.count("1")

            # 将计数添加到结果列表中
            result.append(count)

        # 返回结果列表
        return result

 用递归写count函数:

class Solution(object):
    def countBits(self, num):
        # 初始化一个空列表来存储结果
        res = []
        
        # 遍历从0到num的所有数字
        for i in range(num + 1):
            # 调用count方法来计算当前数字的二进制表示中1的个数,并将结果添加到res列表中
            res.append(self.count(i))
        
        # 返回计算结果
        return res
    
    def count(self, num):
        # 基本情况:当num为0时,返回0,表示没有1
        if num == 0:
            return 0
        
        # 递归情况:当num为奇数时,返回num - 1的二进制表示中1的个数再加1
        # 如果num为偶数,则返回num除以2的二进制表示中1的个数
        if num % 2 == 1:
            return self.count(num - 1) + 1
        
        # 如果num为偶数,则返回num除以2的二进制表示中1的个数
        return self.count(num // 2)

 记忆化搜索:(把前面已经递归求解过的结果保存起来)

class Solution(object):
    def countBits(self, num):
        # 初始化一个长度为num+1的数组,用于存储计算过的结果,初始值都为0
        self.memo = [0] * (num + 1)
        
        # 初始化一个空列表来存储最终的结果
        res = []
        
        # 遍历从0到num的所有数字
        for i in range(num + 1):
            # 调用count方法来计算当前数字的二进制表示中1的个数,并将结果添加到res列表中
            res.append(self.count(i))
        
        # 返回计算结果
        return res
    
    def count(self, num):
        # 基本情况:当num为0时,返回0,表示没有1
        if num == 0:
            return 0
        
        # 如果已经计算过 num 的结果,直接返回之前计算过的结果
        if self.memo[num] != 0:
            return self.memo[num]
        
        # 递归情况:当num为奇数时,返回num - 1的二进制表示中1的个数再加1
        # 如果num为偶数,则返回num除以2的二进制表示中1的个数
        if num % 2 == 1:
            res = self.count(num - 1) + 1
        else:
            res = self.count(num // 2)
        
        # 将计算结果保存到memo数组中,以备后续使用
        self.memo[num] = res
        
        # 返回计算结果
        return res

 

posted @ 2024-04-07 14:18  Junior_bond  阅读(10)  评论(0)    收藏  举报