当前位置:实例文章 » 其他实例» [文章]leetcode306. 累加数

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),因为我们只使用了常数空间来存储变量。

相关标签:
其他信息

其他资源

Top