|
发表于 2020-1-19 23:06:36
|
显示全部楼层
- from scipy.special import perm
- from string import digits
- def count1(length):
- num=0
- for i in range(3,length):
- num+=9*10**(i-1)-(perm(10,i)-perm(9,(i-1)))
- return num+10
- def count2(n,length):
- num=0
- num+=(int(str(n)[0])-1)*perm(9,length-1)
- i=1
- while i<=length-2:
- k=sorted(set(str(n)[:i+1])).index(str(n)[i])
- num+=(int(str(n)[i])-k)*perm(9-i,length-i-1)
- i+=1
- if len(str(n)[:-1])==len(set(str(n)[:-1])):
- last_num=int(str(n)[-1])
- digit=digits[:last_num+1]
- for i in str(n)[:-1]:
- digit=digit.replace(i,'')
- last=len(digit)
- else:last=0
- return n-10**(length-1)-num-last
- def fun309(n):
- length=len(str(n))
- if n<=10:return 0
- elif length==2:
- if str(n)[0]<=str(n)[1]:
- return int(str(n)[0])
- else:
- return int(str(n)[0])-1
- else:
- return int(count1(length)+count2(n,length))
复制代码
@zlzlt |
评分
-
查看全部评分
|