题目:
分析:
首先强调:
A【x】表示 x位数的含有2的个数:
B【x】表示 x位数的含有数字的个数
x=1 A【x】=1 B【1】=10
A【2】=10*A【1】(解释:0开头也算,X2的形式)+B【1】(解释:0开头也算,2X的形式)
代码:
class Solution {
public:
int numberOf2sInRange(int n) {
int n1=n;
long long n2=10;
long long A[10],B[10];
A[0]=1;
B[0]=10;
long long result=0;
if(n<2) return 0;
if(n<10) return 1;
if(n%10>=2) result=1;
n=n/10;
for(int i=1;;i++)
{
if(n==0) return result;
int c=n%10;
n=n/10;
if(c==1){
result+=A[i-1];
}
if(c==2)
{
//result=result*2;
result+=c*A[i-1]+n1%n2+1;
}
if(c>=3) {
result+=c*A[i-1]+B[i-1];
}
A[i]=10*A[i-1]+B[i-1];
B[i]=B[i-1]*10;
n2=n2*10;
}
}
};