郭家兴0624 level
获赞
833
粉丝
9
关注
1
看过 TA
5
哈尔滨工业大学
2020
算法工程师
IP属地:未知
暂未填写个人简介
私信
关注
2019-08-11 09:51
已编辑
哈尔滨工业大学 算法工程师
题目描述求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。 思路:寻找规律可以发现,对于个位,数字1每隔10出现1次;对于十位,数字1每隔100出现1次;对于百位,数字1每隔1000出现100次;...对于不完整的部分,比如15,只需要对10取余加1即可。综上,变量有间隔次数和出现次数,同时要注意不完整部分,可以利用辗转相除的思想。 de...
GloriaValen:我严重怀疑这代码不是你自己写的,因为感觉你自己都不知道这个代码在干什么事情,注释都错了 不懂请不要装懂误导别人 这个代码的核心思想就是找出各个位数上1的个数,和辗转相除一点关系都没有 重新注释了一下,有兴趣的就看看吧 def NumberOf1Between1AndN_Solution(n):     temp = n     res = 0     base = 1                            # 应该是指位数,1表示个位,10表示十位....     while temp:         p = temp % 10                   # 取出当前位         temp = temp // 10         res += temp * base              # temp * base得到该位的出现次数         if p == 1:             # 如果这个位数是1,那么还要算上这个位数1出现的次数             # 举例: 1141的百位             # 上面temp * base即1 * 100算出的是1000前百位为1的个数,1100到1141百位上的1没统计到,因此最终结果还要加上42个             res += n % base + 1         elif p > 1:             # 如果这个位数大于1,那么这个位数的1还出现了base次             # 举例: 1141的十位             # 上面temp * base即11 * 10算出的是1100前十位为1的个数,1100后还有10个没统计到             res += base         base *= 10     return res
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务