首页 > 解决方案 > 如何在javascript中获取变体数字组合的数量?

问题描述

我需要实现一个接受两个参数的函数——数量0和数量,1并确定放置这些参数的方式有多少01这样一行中就没有两个零。

例如,我需要找到放置 two0和 two的所有方法1

有六种可能的放置方式:0011, 0101, 0110, 1001, 1010, 1100

在三种情况下,一行中有两个零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);

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

标签: javascript

解决方案


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

过滤器包括“00”

递归函数 x 使用n0零、一生成二进制数字符串n1。通过分支到 (加一个零,找到一个减一的组合)'0'+x(n0-1,n1)和 (加一个一,找到一个减一的组合) 来工作'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')))


推荐阅读