如果你写的是递推且存在一个类似这样的找 windy 数的函数。
int solve(int x){
int cnt=0,ans=0;
while(x) a[++cnt]=x%10,x/=10;
for(int i=1;i<cnt;i++)
for(int j=1;j<=9;j++)
ans+=f[i][j];
for(int j=1;j<a[cnt];j++) ans+=f[cnt][j];
for(int i=cnt-1;i>=1;i--){
for(int j=0;j<a[i];j++)
ans+=(j-a[i+1]>=2||j-a[i+1]<=-2)?f[i][j]:0;
if(a[i+1]-a[i]<2&&a[i+1]-a[i]>-2) break;
}
return ans;
}
注意(1)处的循环是不会跑到对应数位值上的,所以他求的是[1,x)左闭右开区间的 windy 数个数!
所以最后求答案是用 solve(b+1)−slove(a) 而非 solve(b)−slove(a−1)!!!