题图 From 花瓣网 By Clm
前不久在网上看到这样一道面试题目,题面是这样的:
有一个数组,如果有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个值以此类推,结果如何,如何用JavaScript实现这个功能呢?
原题目要求是用java来实现,这里我给换成了javascript,语言其实无关紧要,就像leetcode的题目,主要是看思维方式。
代码如下:
大体的思路是:
1、大循环套小循环,大循环根据数组的程度进行循环,每循环一次,将数组的第一项剔除。
2、小循环中定义了一个局部变量index,这里的思路是,每次循环将数组分为固定前缀和剩余变化值,然后将剩余变化值和前缀进行拼接,塞入result中。
代码流程图如下:
其实这个题目还有很多变式,比如将需求改为,从数组中随机选择两个值能有多少种组合,随机选择三个呢?
大家可以思考一下,这些小的思考对编程思维的形成很有帮助,笔者也是很乐于写写这方面的文章,大家有什么好的题目可以分享出来,欢迎大家留言。