70. 爬楼梯

138 阅读1分钟

题目描述

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。

示例

示例 1:
输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。

  1. 1 阶 + 1 阶
  2. 2 阶

示例 2:
输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。

  1. 1 阶 + 1 阶 + 1 阶
  2. 1 阶 + 2 阶
  3. 2 阶 + 1 阶

来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/cl…

实现


// f(n) = f(n-1) + f(n-2),递归
/*
int climbStairs(int n)
{
    int result = 0;
    if (n == 1) {
        result = 1;
    } else if (n == 2) {
        result  = 2;
    } else {
        result = climbStairs(n - 1) + climbStairs(n - 2);
    }
    return result;
}
*/
// 非递归
int climbStairs(int n)
{
    if (n == 1)
        return 1;
    if (n == 2)
        return 2;
    long int a[3] = {1, 2, 0};
    for (int i = 3; i <= n; i++) {
        a[2] = a[0] + a[1];
        a[0] = a[1];
        a[1] = a[2];
    }
    return a[2];
}