不知道我在哪里错了

时间:2016-10-04 07:54:16

标签: arrays string recursion

有关某个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);
};

1 个答案:

答案 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/

相关问题