【发布时间】:2018-01-11 04:18:33
【问题描述】:
我参加了一次面试,并被问到一个我想了解解决方案的问题。
问题
创建一个递归函数,该函数返回给定长度的数组的可能组合数,该数组可以由非重复连续整数数组组成。
f(array, length) = 组合
示例 1
- 数组 = [0,1,2,3]
- 长度 = 2
- 组合 = 10(所有组合:[0,0] [0,1] [0,2] [0,3] [1,1] [1,2] [1,3] [2,2] [2,3] [3,3])
- 请注意,[0,0] 是允许的,但 [1,0] 不允许,因为 [0,1] 已定义
示例 2
- 数组 = [0,1]
- 长度 = 3
- 组合 = 4(所有组合:[0,0,0] [0,0,1] [0,1,1] [1,1,1])
提供了一个“提示”。面试官说阵列本身不重要;长度就足够了。
【问题讨论】:
-
您不了解问题或解决方案吗?你知道递归是如何工作的吗?像这样的问题不是要得到“正确的答案”,而是要考虑如何解决问题。如果您不了解递归,那么该解决方案对您也没有意义。
-
@DStanley - 我确实理解递归,尽管它增加了复杂性。我最难理解的是如何使用递归来完成所需的结果。我的直觉是使用一系列非常丑陋的循环。它完全把我难住了。
-
您的问题中没有任何内容可以解释为什么 [2,1] 和 [1,0,0] 不是有效的组合。
-
@MattTimmermans 如果 [1,0] 是不允许的,因为 [0,1] 已定义,那么我猜 [2,1] 不是因为 [1,2] 已定义,与 [ 1,0,0] 和 [0,1,0] 定义为 [0,0,1]。
-
也没什么好说的,为什么 [0,2] 不是解决方案,因为“非连续”的标准仅适用于输入数组