领扣第3题:计算数字 k 在 0 到 n 中的出现的次数,k 可能是 0~9 的一个值。

#方法一:笨办法,非常浪费时间和内存,但一定可以得到正确答案

class Solution:

"""

@param k: An integer

@param n: An integer

@return: An integer denote the count of digit k in 1..n

"""

def digitCounts(self, k, n):

# write your code here

total = 0

key = str(k)

for value in range(n+1):

st = str(value)

total = total + st.count(key)

return total

#方法二:利用数学规律,但比较麻烦(由于比较麻烦,k=0的情况未做解答)

def digitCounts(k, n):

if k == 0:

pass

if k != 0:

base = 10

count = 0

if n % 10 >= k and n > 10:

count = count + 1

value = n

while value:

#该循环逻辑是用来判断n的最高位大小

if value < 10 and value == k:

t = n - k * base // 10 + 1

count = count + t

return count

elif k < value < 10:

count = base // 10 + count

return count

elif value < k:

return count

if base == 10:

value = n // base

count = count + value

base = base * 10

continue

if value % 10 > k:

count = count + (value//10 + 1)*base//10

elif value % 10 == k:

t = n % (base // 10)+1

count = count + value // 10 * base // 10 + t

else:

count = count + value//10*base//10

value = n // base

base *= 10

return count

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐