LeetcodeMedium-【面试题43. 1~n整数中1出现的次数】
程序员文章站
2022-06-07 10:29:20
...
输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。
例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。
示例 1:
输入:n = 12
输出:5
示例 2:
输入:n = 13
输出:6
限制:
1 <= n < 2^31
注意:本题与主站 233 题相同:https://leetcode-cn.com/problems/number-of-digit-one/
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/1nzheng-shu-zhong-1chu-xian-de-ci-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路1:规律
主要思路就是:
根据题目要求实际上就是求n以内的所有数的每一位上的1的个数和,那么可以直接考虑个位上为1时有多少个数(n1)、十位上为1的有多少个数(n2)…然后结果就是这些个数相加即可,结果为 n1 + n2 + …
class Solution:
def countDigitOne(self, n: int) -> int:
d = 1
r = n % 10
l, h = 0, n // 10
ans = 0
while h != 0 or r != 0:
if r == 0:
ans += h * d
elif r == 1:
ans += h * d + l + 1
else:
ans += (h + 1) * d
# print(h, l, r, d)
l = r * d + l
r = h % 10
h = h // 10
d *= 10
return ans
上一篇: python中global用法实例分析
推荐阅读
-
剑指offer31:整数中1出现的次数(从1到n整数中1出现的次数)
-
剑指offer JZ31 整数中1出现的次数 Python 解
-
【剑指offer】_11整数中1出现的次数
-
【LeeCode 中等 数学 python3】剑指 Offer 43. 1~n整数中1出现的次数
-
剑指offer 从1到n整数中1出现的次数
-
剑指offer32题:整数中1出现的次数(从1到n整数中1出现的次数)
-
整数中1出现的次数(从1到n整数中1出现的次数)(剑指offer第32题)
-
剑指offer:(32)时间效率 :整数中1出现的次数(从1到n整数中1出现的次数)
-
【剑指offer】从1到n整数中1出现的次数(查找)
-
剑指offer---从1到n整数中1出现的次数