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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)