说是javascrip算面面试题有点片面了,任何语言都可以哈,题面是这样的:
有一个数组,如果有3个值:[3,2,6]。交叉组合后返回:3-2,3-6,2-6,3-2-6
有一个数组,如果有4个值:[3,2,6,9]。交叉组合后返回:3-2,3-6,3-9,2-6,2-9,6-9,3-2-6,3-2-9,2-6-9,3-2-6-9
5个值,6个值以此类推
求各大神指教如何实现
说是javascrip算面面试题有点片面了,任何语言都可以哈,题面是这样的:
有一个数组,如果有3个值:[3,2,6]。交叉组合后返回:3-2,3-6,2-6,3-2-6
有一个数组,如果有4个值:[3,2,6,9]。交叉组合后返回:3-2,3-6,3-9,2-6,2-9,6-9,3-2-6,3-2-9,2-6-9,3-2-6-9
5个值,6个值以此类推
求各大神指教如何实现
谢邀,供参考
function combine (arr, step = 1) {
const result = []
for (let i = 0; i < arr.length; i++) {
const head = arr.slice(i, i + step).join('-') + '-'
for (let j = i + step; j < arr.length; j++) {
result.push(head + arr[j])
}
}
return step < arr.length ? result.concat(combine(arr, step + 1)) : result
}
console.log(combine([3, 2, 6, 9]))
let nums = [3, 2, 6, 9];
let cut = (arr, index) => arr.slice(index + 1, arr.length - index)
let map = (prefix, suffix) => {
suffix.forEach((item, index) => {
console.log(`${prefix}-${item}`);
map(`${prefix}-${item}`, cut(suffix, index))
})
}
nums.forEach((num, index) => map(num, nums.slice(index + 1, nums.length)))
思路的话我看抽空水个文章哈哈哈,也不知道对不对。
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
能实现