我需要实现一个接受两个参数的函数 -0
数和1
数,并确定放置这些0
和1
的方法有多少种,以便一行中没有两个零。
例如,我需要找到放置两个0
和两个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
1 生成二进制数字符串。 通过分支到(添加一个零,为少一个零找到组合('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);
改变这两件事可以解决它。