輸入一個整數 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