Algorithm 打印方式达到n’;第四级
我最近在一次采访中遇到了这个问题 有Algorithm 打印方式达到n’;第四级,algorithm,data-structures,dynamic-programming,Algorithm,Data Structures,Dynamic Programming,我最近在一次采访中遇到了这个问题 有n楼梯,站在底部的人想爬到顶部。该人员一次可以爬1级或2级楼梯 打印人员到达顶部的所有可能方式 例如,n=4输出: 1 2 3 4 1 2 4 1 3 4 2 3 4 2 4 但我无法正确地编写代码。如何为此编写解决方案?您可以尝试一些递归解决方案,其中递归调用canclim(n-1)和canclim(n-2),以可视化可能的方法 C#中的样品溶液: 如果只想计算它们,可以使用众所周知的斐波那契序列,该序列可以迭代计算: public static int
n
楼梯,站在底部的人想爬到顶部。该人员一次可以爬1级或2级楼梯
打印人员到达顶部的所有可能方式
例如,n=4
输出:
1 2 3 4
1 2 4
1 3 4
2 3 4
2 4
但我无法正确地编写代码。如何为此编写解决方案?您可以尝试一些递归解决方案,其中递归调用
canclim(n-1)
和canclim(n-2)
,以可视化可能的方法
C#中的样品溶液:
如果只想计算它们,可以使用众所周知的斐波那契序列,该序列可以迭代计算:
public static int Fibonacci(int n)
{
int a = 0;
int b = 1;
// In N steps compute Fibonacci sequence iteratively.
for (int i = 0; i < n; i++)
{
int temp = a;
a = b;
b = temp + b;
}
return a;
}
公共静态int Fibonacci(int n)
{
int a=0;
int b=1;
//以N步迭代计算斐波那契序列。
对于(int i=0;i
要打印路径数,您可以先了解如何计算路径数,然后调整它,使每个“计数”都可以打印,而不仅仅是计数:
D(0) = 1
D(-1) = 0
D(i) = D(i-1) + D(i-2)
要根据实际打印进行调整,您需要“记住”所做的选择,并遵循相同的逻辑。伪代码:
printWays(curr, n, soFar):
if curr > n:
return
soFar.append(curr)
if n == curr:
print soFar
soFar.removeLast()
return
printWays(curr+1,n,soFar)
printWays(curr+2,n,soFar)
soFar.removeLast()
这个想法是:
- soFar是您当前执行的一系列步骤
是您当前的步骤curr
是您需要到达的最后一个楼梯n
- 在每一点上,你要么爬一级,要么爬两级。两个选项都选中
D(0) = 1
D(-1) = 0
D(i) = D(i-1) + D(i-2)
printWays(curr, n, soFar):
if curr > n:
return
soFar.append(curr)
if n == curr:
print soFar
soFar.removeLast()
return
printWays(curr+1,n,soFar)
printWays(curr+2,n,soFar)
soFar.removeLast()