算法练习06 从数组中取出n个元素的所有组合
用递归实现从数组中取出n个元素的所有组合。
题目
给定一个数组arr
,从中选出n
个元素,要求给出所有组合的情况(结果在一个数组中)
例子:
1 | const arr = ['1', '2', '3']; |
分析
实际上就是一个求排列组合的问题。对上面的例子进行分析
(1)首先arr
是['1', '2', '3']
,n
是2
,先取出数组中第一项1
,然后需要从剩下的两个元素中取一个
(2)此时可以将arr
看做[ '2', '3']
,n
是1
,在从中任取一项就行了
(3)此时结果为['12', '13']
(4)返回第一步,取出数组中第一项1
改为取第二项2
,然后从剩下的元素中取
(5)重复进行上面的步骤
很明显,分析后发现这是一个递归的过程,不过要注意的是需要控制取出第一个元素的序列,防止12
和21
作为两种情况出现。控制方法有两种,或者传入一个start
作为开始的索引值,或者用slice
来剪切数组,将数组已经取过的元素剪切掉
代码
忽略了n
大于数组长度的情况的处理。
1 | /** |