输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。 例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。
直觉
不要试图遍历 [1, 2, 3, ..., n] 的list,而是直接从分析 n 入手,以求解出1出现的次数。
关键代码
1 2 3 4 5 6 7 8
while high != 0or cur != 0: if cur == 0: res += high * digit elif cur == 1: res += high * digit + low + 1 else: res += (high + 1) * digit low += cur * digit cur = high % 10 high //= 10 digit *= 10
classSolution: deflastRemaining(self, n: int, m: int) -> int: if n < 1or m < 1: return -1 last = 0 for i inrange(1, n+1): last = (last + m) % i return last