pythondef solve(N, K):
"""
>>> solve(9, 1)
9
>>> solve(5, 1)
5
"""
x = N
digits = []
while x:
x, r = divmod(x, 10)
digits.append(r)
digits.reverse()
numDigits = len(digits)
isBorder = True
isHead = True
index = 0
ret = 0
for i in range(10):
if i == 0:
continue
if i > digits[index]:
break
ret += 1
return retpythondef solve(N, K):
"""
>>> solve(9, 1)
9
>>> solve(5, 1)
5
"""
x = N
digits = []
while x:
x, r = divmod(x, 10)
digits.append(r)
digits.reverse()
numDigits = len(digits)
def f(isBorder, isHead, index):
ret = 0
for i in range(10):
if i == 0:
continue
if i > digits[index]:
break
ret += 1
return ret
return f(True, True, 0)pythonFailed example:
solve(10, 1)
Expected:
10
Got:
1python for i in range(10):
if i == 0:
if isHead and index == numDigits - 1:
continue
else:
ret += f(False, True, 1)pythonFailed example:
solve(10, 1)
Expected:
10
Got:
2python if isBorder and i > digits[index]:
breakpythonFailed example:
solve(10, 1)
Expected:
10
Got:
11python for i in range(10):
if i == 0:
if isHead and index == numDigits - 1:
continue
else:
ret += f(False, True, 1)
if isBorder and i > digits[index]:
break
ret += 1
debug("ret: ret, isBorder, isHead, index: ",
ret, isBorder, isHead, index)
return retpython >>> solve(100, 1)
19python for i in range(10):
if i == 0:
if isHead and index == numDigits - 1:
continue
else:
ret += f(False, True, index + 1)
continue
if isBorder and i > digits[index]:
break
ret += 1python if isHead and index == numDigits - 1:
continue
else:
xs = f(False, True, index + 1)
for j in range(K + 1):
ret[j] += xs[j]
continuepython >>> solve(25, 2)
14pythonFailed example:
solve(25, 2)
Expected:
14
Got:
0