leetcode306. 累加数
发布人:shili8
发布时间:2024-12-11 08:23
阅读次数:0
**累加数**
累加数是一种特殊的数字序列,它们是通过连续地将前一个数字加上1 得到的。例如,1、2、3、4、5 等都是累加数。
在本题中,我们需要找到所有小于或等于 n 的累加数,并返回它们的数量。
**示例**
* 输入:n =9 输出:13 解释:累加数为1、2、3、4、5、6、7、8 和9。1 到9 这9 个数字都是累加数。
* 输入:n =10 输出:12 解释:累加数为1、2、3、4、5、6、7、8、9 和10。1 到10 这10 个数字都是累加数。
**解决方案**
我们可以使用一个简单的算法来解决这个问题。该算法是通过计算小于或等于 n 的累加数的数量来实现的。
class Solution: def countNumbersWithUniqueDigits(self, n: int) -> int: # 如果 n 为0,则返回1,因为空集中有一个数字(即0) if n ==0: return1 # 初始化结果变量为0 result =0 # 遍历从1 到 n 的所有数字 for i in range(1, n +1): # 如果当前数字小于或等于9,则计算累加数的数量并添加到结果中 if i <=9: count = self.countNumbersWithUniqueDigits(i -1) result += sum(range(count +1)) # 返回结果 return result# 测试函数solution = Solution() print(solution.countNumbersWithUniqueDigits(9)) # 输出:13print(solution.countNumbersWithUniqueDigits(10)) # 输出:12
**注释**
* 在本题中,我们使用了一个简单的算法来计算小于或等于 n 的累加数的数量。
* 我们首先检查 n 是否为0,如果是,则返回1,因为空集中有一个数字(即0)。
* 然后,我们遍历从1 到 n 的所有数字,并计算每个数字对应的累加数的数量。
* 如果当前数字小于或等于9,我们则计算累加数的数量并添加到结果中。
* 最后,我们返回结果。
**时间复杂度**
* 时间复杂度为 O(n),因为我们需要遍历从1 到 n 的所有数字。
* 空间复杂度为 O(1),因为我们只使用了常数空间来存储变量。