我接受了一次采访,被问到一个问题,我想了解解决方案。
创建一个递归函数,该函数返回给定长度的数组的可能组合数,这些数组可以由非重复连续整数数组组成。
f(数组,长度)=组合
提供了一个“提示”。采访者说阵列本身并不重要;长度就是所需要的。
你没有给出目标语言,也没有说你想要多少帮助。所以我将给出一个算法的总体想法,如果你知道某种语言的递归,那么这个算法应该很容易编码。问问你是否想要更多Python代码,我目前更喜欢的语言。
您知道需要进行递归,并且有两件事情可以进行递归:给定数组的长度或所需数组的长度。让我们在第二个循环,假设给定的数组是0,1,…,n-1,因为您知道实际内容是不相关的。
如果所需的长度r
是1
,您知道只有n
所需的数组,即[0]
、[1]
、...,[n-1]
。因此存在递归的基本情况。
如果您有长度r-1
的“组合”,如何将其扩展为长度r
并保持要求?看看长度r-1
数组中的最后一个元素——让我们称其为k
。下一个元素不能小于此,因此所有可能扩展到长度r
的数组都是附加有k','k 1
,...,n-1
的r-1
数组。这些是长度r
的n-k
数组。
是否清楚如何编码?请注意,您不需要保留所有长度为r-1
的数组,您只需要计算以元素0
或1
或...n-1
结尾的数组数量。这使得编码很方便——不需要太多内存。事实上,事情可以进一步减少——我将留给你。
请注意,面试官可能不想要代码,他希望你的思维过程引导代码看到你的思维方式。这是思考问题的一种方式。
该算法可以递归表示,因为解可以用较小输入的解来表示。这里的“较小”有两个含义:
>
数组的子集;特别是当前元素索引之后的子数组
较小长度的解决方案;这些可以加在一起得到长度1的解
停止条件:
>
当数组大小A=1
-只能生成一个组合
当长度L=1时,组合数=阵列中的元素数
完全递归过程是一个非常简单的单行程序:
return [recursive call to rest of array, same length] +
[recursive call to same array, length - 1]
这叫做动态规划。
代码:
int F(int A, int L)
{
if (A <= 1) return 1;
if (L <= 1) return A;
return F(A - 1, L) + F(A, L - 1);
}
测试:
编辑:我已经给出了一个优雅而简单的解决方案,但我可能没有像@RoryDaulton那样解释清楚。考虑也给他的答案加分。
我想写返回true的Python函数一个字符串s是回文,也就是等于它的反。例如,“赛车”和“abba”是回文。到目前为止,这是我不成功的尝试。 当我告诉我的函数返回相反的结果时,我没有问题,但是,我不知道应该如何进行比较才能返回一个布尔值。 使用上面的函数会产生以下错误 现在我完全理解为什么会产生上述错误。这是因为一些递归函数返回一个boool并尝试将其添加到字符串中;但是我做不到的是如何避免这个
我需要一些帮助在Java:我有一个函数签名,我不能改变,我的函数需要递归和返回字符串数组没有任何选项添加到签名。 这是我的签名: 该函数在TRIE结构中查找相似的单词,在它们之间有K个字母变化的差异。 例如-在单词“bike”和k=2的TRIE中,该函数将返回一个(包含nice和nine)。 我不是在寻找解决方案,只是为了一个返回字符串数组的方法。 **我用我收到的签名编写了一个函数作为包装器,但
我有一个递归函数,它会重复这个函数,直到不满足if条件,然后输出一个整数。但是,此函数之外需要整数的函数正在接收一个单位。我应该如何修改代码以返回int? 这就是整个程序 }
我正在编写一个递归函数,如下所示: 此函数用于接收员工并查找其管理者。如果找到管理器,则将管理器id推送到数组中($)- 所以我的问题是,如果我不在第6行返回递归调用(这是-
问题内容: 我有一个计算税金的函数。 我不明白为什么它不能停止递归。 问题答案: 在您的职能部门中: 您没有从函数或设置中返回值。当您不返回任何内容时,返回值为。 也许,您想要这样:
我正在尝试创建一个递归函数,该函数将生成项的嵌套结构。此文件中的每个项都有一个指向其子项的指针和一个停止值,如您可以在下面看到的: 这个递归函数应该获得一个开始索引,它将根据该索引构建树,并返回一个嵌套的字典,如下所示: