bluecode-有限制的楼梯攀登

45 阅读1分钟

问题描述

小U最近决定挑战一座非常高的楼梯,每次他可以选择走一步或两步,但有一个重要的限制:他不能连续走两步。因此,小U想知道他总共有多少种不同的方式可以从楼梯的底部走到顶端。

你需要帮他计算在给定的楼梯层数下,小U有多少种走法。


测试样例

样例1:

输入:n = 2
输出:2

样例2:

输入:n = 3
输出:3

样例3:

输入:n = 4
输出:4


#include <iostream>

int solution(int n) {
  if (n == 0)
    return 1;
  if (n == 1)
    return 1;
  if (n == 2)
    return 2;

  int a = 1, b = 1, c = 2; // dp[0], dp[1], dp[2]
  for (int i = 3; i <= n; ++i) {
    int next = c + a;
    a = b;
    b = c;
    c = next;
  }

  return c;
}

int main() {
  // Add your test cases here

  std::cout << (solution(2) == 2) << std::endl;
  return 0;
}