有关某个n,我们要确定唯一的“0”和“1”由不同的串的数目在其中不存在两个相邻的“1”。(串的大小是N)对不起,我的英文不好。 这是我的尝试:
long Num(int n){
if(n==0)
return 0;
else if(n==1)
return 2;
else if(n==2)
return 3;
else if(n==3)
return 5;
else
return 2*Num(n-2) + Num(n-3);
};
答案 0 :(得分:0)
找出长度为n的可能二进制字符串的数量,没有连续的1。
输入:N = 2 输出:3 // 3个字符串是00,01,10
输入:N = 3 输出:5 // 5个字符串是000,001,010,100,101
令a [i]为长度为i的二进制字符串的数量,其不包含任何两个连续的1并且以0结尾。类似地,令b [i]为以1结尾的此类字符串的数量。可以将0或1附加到以0结尾的字符串,但是我们只能将0附加到以1结尾的字符串。这将产生递归关系:
a[i] = a[i - 1] + b[i - 1]
b[i] = a[i - 1]
上述重现的基本情况是a [1] = b [1] = 1.长度为i的字符串总数只是a [i] + b [i]。虽然使用数组i(字符串的长度)将少1,对于数组的零位置。
int countStrings(int n)
{
int a[] = new int [n];
int b[] = new int [n];
a[0] = b[0] = 1;
for (int i = 1; i < n; i++)
{
a[i] = a[i-1] + b[i-1];
b[i] = a[i-1];
}
return a[n-1] + b[n-1];
}
有关详细信息,请参阅http://www.geeksforgeeks.org/count-number-binary-strings-without-consecutive-1s/