我不明白
查看原帖
我不明白
766436
Mr_RedStone楼主2024/12/30 21:58

如果这么写可以过。。。

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 表示的是是否含前导零,为 00 时表示没有前导零。

这里不就是满足无前导零就可以返回吗,那我这两种判断法有什么区别?

求教。

优势在我。

2024/12/30 21:58
加载中...