对于数组
Array = ["A","B","C"]
将字母 S 插入生成新的长度不大于6位的数组(不改变ABC整体的顺序)
//输出所有满足条件的新数组
["S","A","B","C"]
["S","A","S","B","C"]
["S","A","S","B","S","C"]
...
有什么思路,或者简洁的写法吗?
对于数组
Array = ["A","B","C"]
将字母 S 插入生成新的长度不大于6位的数组(不改变ABC整体的顺序)
//输出所有满足条件的新数组
["S","A","B","C"]
["S","A","S","B","C"]
["S","A","S","B","S","C"]
...
有什么思路,或者简洁的写法吗?
我算出来有34条
start(arr, res = []) {
let length = arr.length,
str = 's',
max = 6,
i = 0;
while (i <= length) {
let b = JSON.parse(JSON.stringify(arr));
b.splice(i++, 0, str)
if (b.length <= max) {
res.push(b.toString());
this.start(b, res);
}
}
return res;
}
let res = this.start(['A', 'B', 'C'])
console.log([...new Set(res)].sort());
因为是算法题,所以更多的是从算法上考虑:
'S'
的可能集合。对于[]
,'S'
的可能集合是["S"]
、["S", "S"]
、["S", "S","S"]
、["S","S","S","S""]
、["S", "S","S","S","S"]
、["S", "S","S","S","S","S"]
,对于其它输入数值A,则是[1,(6-A.length)]
个'S'
,且A.length<6
A.length<6
时,可能插入'S'
数组位置为 A.length+1
个'S'
的可能集合,进行再分组(新的组合问题),根据分组数量,从数组A可能插入'S'
数组位置中,选择对应数量位置,分别插入。10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
简单的排列组合问题,回溯算法的复杂度比较复杂,用能力的可以自己算一下