用枚举算法解决LeetCode题库第2719题统计整数数目问题

2719. 统计整数数目

难度:困难

问题描述:

给你两个数字字符串 num1 和 num2 ,以及两个整数 max_sum 和 min_sum 。

如果一个整数 x 满足以下条件,我们称它是一个好整数:

num1 <= x <= num2

min_sum <= digit_sum(x) <= max_sum.

请你返回好整数的数目。答案可能很大,请返回答案对 109 + 7 取余后的结果。

注意,digit_sum(x) 表示 x 各位数字之和。

示例 1:

输入:num1 = "1", num2 = "12", min_num = 1, max_num = 8

输出:11

解释:总共有 11 个整数的数位和在 1 到 8 之间,分别

是 1,2,3,4,5,6,7,8,10,11 和 12 。所以我们返回 11 。

示例 2:

输入:num1 = "1", num2 = "5", min_num = 1, max_num = 5

输出:5

解释:数位和在 1 到 5 之间的 5 个整数分别为 1,2,3,4 和 5 。所以我们返回 5 。

分析:

本题应该不难,但却设置为困难。或者正应了一句话,叫“会者不难,难者不会”。

程序如下:

#函数digit_sum(x)计算x各位数字之和并返回
def digit_sum(x):
    y=list(x)
    return sum(map(int,y))

#输入
num1=input('pls input num1=')
num2=input('pls input num2=')
min_sum=int(input('pls input min_sum='))
max_sum=int(input('pls input max_sum='))

#设置计数器n,用于统计好整数个数
n=0

#用循环对介于min_num和max_num之间的整数进行好整数检验
for i in range(int(num1),int(num2)+1):
    if min_sum<=digit_sum(str(i))<=max_sum:
        print(i,end=' ')
        n=n+1

#清除不换行格式
print()
print(f'共有{n}个好整数')

运行实例1:

pls input num1=5

pls input num2=20

pls input min_sum=8

pls input max_sum=12

8 9 17 18 19

共有5个好整数

运行实例2:

pls input num1=1

pls input num2=12

pls input min_sum=1

pls input max_sum=8

1 2 3 4 5 6 7 8 10 11 12

共有11个好整数

运行实例3:

pls input num1=3

pls input num2=29

pls input min_sum=1

pls input max_sum=20

3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

共有27个好整数

感悟:循环是人生的常态,古有“六道轮回”之说,轮回轮回又轮回,让人直感叹前世今生之变幻莫测;时间周而复始,一天一天,一个星期又一个星期,一年又一年,岁月悠悠更觉人生之美好,这一切无不体现循环之美妙神奇,循环也让我们更加明白人生的道理,很多事情往往要经历枯燥甚至痛苦的人生磨炼,艰难地等待,循环往复,最后才能取得成功。“复杂的事情简单做,你就是专家。简单的事情重复做,你就是行家。重复的事情用心做,你就是赢家”,人生贵在坚持。

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值