如何在 javascript 中获取变体数字组合的数量?



我需要实现一个接受两个参数的函数 -0数和1数,并确定放置这些01的方法有多少种,以便一行中没有两个零。

例如,我需要找到放置两个0和两个1的所有方法。

有六种可能的方式放置它们:001101010110100110101100

在三种情况下,一行有两个零:001110011100

我从总数中减去它们,得到三种可能的方法:010101101010。所以答案是3.

首先,我正在尝试编写脚本来识别我需要哪些情况

let arr = ["1100","1010","1001","0011","0101","0110"]
let result = [];
for (let i = 0; i < arr.length; i++){
let expVal = arr[i];
for (let p = 0; p < expVal.length; p++){
if (expVal[p] === expVal[p++] || expVal[p] === "0"){
result.push(expVal)
}
} 
}
console.log(result);

这是行不通的。我不知道如何解决它。 我不明白我以后需要做什么

您正在解决的问题等价于斐波那契数列。

筛选器包括"00">

递归函数 X 使用n0n11 生成二进制数字符串。 通过分支到(添加一个零,为少一个零找到组合('0'+x(n0-1,n1)和(添加一个,为少一个 1 找到组合('1'+x(n0,n1-1)

let arr = ["1100","1010","1001","0011","0101","0110"]
const x = (n0,n1) =>
!(n0 === 0 || n1 === 0) ?
x(n0-1,n1).map(x=>'0'+x).concat(
x(n0,n1-1).map(x=>'1'+x))
: ['0'.repeat(n0)||'1'.repeat(n1)]
arr = x(2,2)
console.log(
x(2,2)
)
console.log(arr.filter(x=>x.includes('00')))

据我所知,代码有 2 个问题:

  • 您将p递增两次:一次在for定义中,一次在执行本身(p++(。第二个应替换为p+1
  • 此外,您正在检查下一个字符是否等于当前字符,OR当前字符是否0。这应该是AND.
    let arr = ["1100","1010","1001","0011","0101","0110"]
    let result = [];
    for (let i = 0; i < arr.length; i++){
    let expVal = arr[i];
    for (let p = 0; p < expVal.length; p++){
    if (expVal[p] === expVal[p+1] && expVal[p] === "0"){
    result.push(expVal)
    }
    } 
    }
    console.log(result);

改变这两件事可以解决它。

最新更新