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 @   Junior_bond  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示