赞
踩
计算数字k在0到n中的出现的次数,k可能是0~9的一个值
例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我们发现1出现了5次 (1, 10, 11, 12)
简单考虑
先不考虑k=0以及k与(a,b,c,d,e)的大小关系,一个数字abcde,那么有
个位:0000k,0001k......abcdk,共abcd+1个//k<=e
或者
0000k,0001k......(abcd-1)k,共abcd个//k>e
十位:000k0.....000k9.....(abc-1)k0...(abc-1)k9,共abc*10个//k>d
或者
000k0.....000k9.....abck0...abck9,共(abc+1)*10个//k<d
或者
000d0.....000d9.....abcd0...abcde,共abc*10+e+1个//k==d
以此类推
等于0时多算了一遍0在首位,减去即可(不过效率低,但我懒得优化,跑路了)。
- int digitCounts(int k, int n) {
- // write your code here
- int total=0;
- if(n%10>=k)total++;
- for(int i=10;i<=n;i*=10){
- total+=n/i*i/10;
- if((n%(i*10))/i==k)total+=n%i+1;
- if((n%(i*10))/i>k)total+=i;
- if(k==0)total-=i;
- }
- return total;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。