这是一个谷歌问题,我没有弄清楚是对还是错,但第二意见从未受到伤害。但问题是"给定一个n长度的位串求解次数" 111"出现在所有可能的组合中。"
现在我知道发现总组合是2 ^ n让我遇到麻烦的是弄清楚我确实在事件中找到了一个模式但是谁知道当n变得很大时会发生什么。
我的逻辑解决方案是
#Level (n length) # combos # strings with "111" in it
_________________ ________ _____________________________
0 0 0
1("1" or "0") 2 0
2("11","01" etc. 4 0
3 8 1("111")
4 16 3
5 32 8
6 64 20
------------------------------------Everything before this is confirmed
7 128 49
8 256 119
9 512 288
10 1000 696
等。我可以发布我如何想出神奇的仙尘,但是是的
答案 0 :(得分:2)
我可以帮助您解决问题:
调用函数计算字符串数,其中n位包含111是f(n)
f(n) += f(n - 1)//0 + (n - 1 bits)
f(n) += f(n - 2) + f(n - 3) + 2^(n - 3)
案例第一位的更多解释是1
如果第一位是1,我们有三种情况:
10 + (n - 2 bits) = f(n - 2)
110 + (n - 3 bits) = f(n - 3)
111 + (n - 3 bits) = 2^(n - 3)
因为我们可以采取所有组合。 总共f(n) = f(n - 1) + f(n - 2) + f(n - 3) + 2^(n - 3)
。
申请我们的例子:
n = 4 -> f(4) = f(3) + f(2) + f(1) + 2^1 = 1 + 0 + 0 + 2 = 3;
n = 5 -> f(5) = f(4) + f(3) + f(2) + 2^2 = 3 + 1 + 0 + 4 = 8;
n = 6 -> f(6) = f(5) + f(4) + f(3) + 2^3 = 8 + 3 + 1 + 8 = 20;
n = 7 -> f(7) = f(6) + f(5) + f(4) + 2^4 = 20 + 8 + 3 + 16 = 47;
n = 8 -> f(8) = f(7) + f(6) + f(5) + 2^5 = 47 + 20 + 8 + 32 = 107;
n = 9 -> f(9) = f(8) + f(7) + f(6) + 2^6 = 107 + 47 + 20 + 64 = 238;