📌  相关文章
📜  计算到达第 N 级楼梯的方法 |第 2 组

📅  最后修改于: 2022-05-13 01:56:04.459000             🧑  作者: Mango

计算到达第 N 级楼梯的方法 |第 2 组

N个楼梯,一个人站在底部想爬到顶部。此人一次可以爬1 个楼梯或2 个楼梯。数一数路数,人能登顶。

第 N 层

例子:

该问题的 Set-1 讨论了动态规划滑动窗口以及其他几种方法。但是这种方式会有更好的整体辅助空间。

方法:这个问题可以根据以下观察以更好的空间复杂度来解决:

请按照下面给出的插图更好地理解。

插图:

请按照以下步骤解决问题:

  • 声明两个变量(例如prev1prev2 )来存储任何当前状态的前两个状态,并用到达第一个和第二个楼梯的方式数来初始化它们。
  • 第 3个楼梯迭代到第 N 个楼梯:
    • 如上述观察所示,计算到达当前楼梯的路径数。
    • 现在根据观察更新prev1prev2变量。
  • 返回作为结果获得的第 N 个楼梯的值。

下面是上述方法的实现:

C++
// C++ code to implement the approach
 
#include 
using namespace std;
 
// Function to find minimum number of steps
int minSteps(int N)
{
    // Can make 1 jump only
    if (N == 1)
        return 1;
 
    // Can jump like {2} and {1 + 1}
    // so two ways for n == 2;
    if (N == 2)
        return 2;
 
    int curr;
    int prev2 = 1;
    int prev1 = 2;
 
    // Iterate from 3rd stair to nth stair
    for (int i = 3; i <= N; i++) {
        curr = prev1 + prev2;
        prev2 = prev1;
        prev1 = curr;
    }
    return curr;
}
 
// Driver code
int main()
{
    int N = 6;
 
    // Function call
    cout << minSteps(N);
    return 0;
}


Java
// Java code to implement the approach
import java.util.*;
 
class GFG {
 
  // Function to find minimum number of steps
  static int minSteps(int N)
  {
    // Can make 1 jump only
    if (N == 1)
      return 1;
 
    // Can jump like {2} and {1 + 1}
    // so two ways for n == 2;
    if (N == 2)
      return 2;
 
    int curr = 0;
    int prev2 = 1;
    int prev1 = 2;
 
    // Iterate from 3rd stair to nth stair
    for (int i = 3; i <= N; i++) {
      curr = prev1 + prev2;
      prev2 = prev1;
      prev1 = curr;
    }
    return curr;
  }
 
  // Driver code
  public static void main (String[] args) {
    int N = 6;
 
    // Function call
    System.out.print(minSteps(N));
  }
}
 
// This code is contributed by hrithikgarg03188.


Javascript


输出
13

时间复杂度: O(N)
辅助空间:O(1)