javascript - 如何在javascript中获取变体数字组合的数量?
问题描述
我需要实现一个接受两个参数的函数——数量0
和数量,1
并确定放置这些参数的方式有多少0
,1
这样一行中就没有两个零。
例如,我需要找到放置 two0
和 two的所有方法1
。
有六种可能的放置方式:0011
, 0101
, 0110
, 1001
, 1010
, 1100
。
在三种情况下,一行中有两个零0011
:1001
和1100
。
我从总数中减去它们,得到三种可能的方法0101
:0110
和1010
。所以答案是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 使用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')))
推荐阅读
- javascript - 如何使用 PHP 或 JS 从 cookie 字符串中获取特定值?
- html - IE 11 不关注跨度与 tabindex
- javascript - javascript如何通过两条规则对对象数组进行排序?
- excel - 将 VBA 用户窗体中的数据保存到两个工作表中
- eclipse - Photon Eclipse JEE 无法启动
- sql - 如何按条件连接表
- javascript - 为什么javascript不能在共享/部分视图的asp.net mvc视图中工作
- noise - MDS 绘图轴与信噪比有何关系?
- jquery - 无法将背景图像属性设置为无
- javascript - 如何在函数内停止 Ajax 调用