通过字典树将n的情况变成一棵树中的路径情况
官方题解中的高度实际上是叶节点标为1,从叶节点往上数数到目标结点的数,并不是从目标结点到叶节点的边数
官方题解中的完全二叉树也存疑
实际上整个操作就是不停地从最高位取数,如果连续取到了两个1就终止
不然的话 就加上和1相同高度的那个0的结果,因为在1的那个位置上填0的数比n小,最后到叶节点实际上就是加上全0的这种情况
int findIntegers(int n){
int dp[30];
dp[0]=1;dp[1]=2;
for(int i=2;i<=29;i++)
{
dp[i]=dp[i-1]+dp[i-2];
}
int res=0;
int t=0;
for(int i=29;i>=0;i--)
{
int temp=1<<i;
if((n&temp)!=0)
{
res+=dp[i];
if(t==1)
break;
else
t=1;
}
else
t=0;
if(i==0)
res++;
}
return res;
}