python leetcode 233. Number of Digit One
-
思路
比如21345
先看1345~21345:万位上有一万个1(剩余四位从0000到9999),再看千位取1(万位取1或2,百十个位上取0~9都可以),再看百位与千位相同取法,同理十位与个位。然后是1345作为输入递归求解 -
代码
class Solution:
def countDigitOne(self, n):
"""
:type n: int
:rtype: int
"""
if n<=0:
return 0
ln=len(str(n))
if ln==1:
return 1
tmp1=10**(ln-1)
firstnum=n//tmp1
Fone = n%tmp1+1 if firstnum==1 else tmp1
other = firstnum*(ln-1)*(tmp1//10)
return Fone + other + self.countDigitOne(n % tmp1)
- 总结
这个思路是在网上找到的,不过作者的这种思路我还没有理解。