Javascript 长度为n且连续k个1的二进制数组的数量

Javascript 长度为n且连续k个1的二进制数组的数量,javascript,algorithm,Javascript,Algorithm,我用这个代码解决了这个问题: 函数getQuantity(n,k){ 常量nums=[]; const re=new RegExp(`^.*[1]{${k}.*?$`,“m”); //转换成十进制 var maxDecimal=数学功率(2,n)-1; //对于0->decimal之间的每个数字 对于(设i=0;i您的方法的复杂性为O(2^N)。使用递归或迭代方法的复杂性为O(N) 这个关系是这样的:f(n+1,k)=2*f(n,k)+2^{n-k}-f(n-k,k) 如果(n

我用这个代码解决了这个问题:

函数getQuantity(n,k){ 常量nums=[]; const re=new RegExp(`^.*[1]{${k}.*?$`,“m”); //转换成十进制 var maxDecimal=数学功率(2,n)-1; //对于0->decimal之间的每个数字
对于(设i=0;i您的方法的复杂性为O(2^N)。使用递归或迭代方法的复杂性为O(N)

这个关系是这样的:
f(n+1,k)=2*f(n,k)+2^{n-k}-f(n-k,k)

如果(nf(k,k)=1,则
f(n,k)=0

最后一项
2^{n-k}-f(n-1-k)
对应于额外数量的新解,
当一个
1
被添加到第(n+1)位时,一个
0
和(k-1)
1
就在前面。然后还有
n-k
位需要设置,即潜在的
2^{n-k}
新的解决方案。但是,术语
-f(n-k,k)
不需要对已经包含在
f(n,k)中的解决方案进行计数
术语。

似乎是您的问题的一个例子,查找长度为N且包含K个连续字符的二进制数表示形式1@ShubhamSrivastava是的!我只需要这些数字的数量,因为我想我的解决方案是多余的。你也许可以用置换来解决这个问题,我现在在打电话,所以我不能给你写信p脚本如果您的代码运行得太慢,如果您提供更多的结果,例如k=3和n=4、5、6、7、8、9、10,可能会有所帮助。这将允许我们验证其他方法,而无需实现您当前的方法。问题是我不懂javascript,但我可能会提供另一种算法。我可能不是唯一一个在cas中的人哎呀!非常感谢!谢谢你的解释
Input: N = 4, K = 3 
Output: 3 // "111", "1110", "1111"