Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 打印方式达到n’;第四级_Algorithm_Data Structures_Dynamic Programming - Fatal编程技术网

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()