如果这么写可以过。。。
long long dfs(int step,int fr,bool flag,bool lead){
if(step<1) return 1;
if(!flag&&fr>0&&f[step][fr]!=-1) return f[step][fr];//here
long long cnt=0;
int up=flag?a[step]:9;
for(int i=0;i<=up;i++){
if(abs(fr-i)>=2||lead) cnt+=dfs(step-1,i,flag&&(i==up),lead&&(i==0));
}
if(!flag) f[step][fr]=cnt;
return cnt;
}
但这么写寄了。
long long dfs(int step,int fr,bool flag,bool lead){
if(step<1) return 1;
if(!flag&&!lead&&f[step][fr]!=-1) return f[step][fr];//here
long long cnt=0;
int up=flag?a[step]:9;
for(int i=0;i<=up;i++){
if(abs(fr-i)>=2||lead) cnt+=dfs(step-1,i,flag&&(i==up),lead&&(i==0));
}
if(!flag) f[step][fr]=cnt;
return cnt;
}
我的 lead 表示的是是否含前导零,为 0 时表示没有前导零。
这里不就是满足无前导零就可以返回吗,那我这两种判断法有什么区别?
求教。
优势在我。