Climbing Stairs(爬楼梯)

xiaoxiao2021-02-28  48

题目描述(Easy)

假设一个楼梯有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 步

题目链接

Climbing Stairs(爬楼梯)

方法思路

第一直觉

递归:f(n) = f(n - 1) + f(n - 2)。但太慢,因为会重复计算很多次f(k)(k <= n)。

变量记录方式

1、考虑preNumDistinctWays记录前一梯的方法数;

2、令当前方法数distinctWays,加上前一梯preNumDistinctWays方法数,就是下一梯求的方法数;distinctWays+= preNumDistinctWays。

通项公式

另外,菲波拉契数列也有通项公式:

核心代码

public int climbStairs(int n) { // 前一梯的方法数 int preNumDistinctWays = 0; // 求的总方法数 int distinctWays = 1; for (int i = 1; i <= n; i++) { // 未加之前方法数临时变量 int temp = distinctWays; // 当前方法数 += 前一梯方法数 distinctWays += preNumDistinctWays; // 将临时变量赋值给前一梯方法数变量 preNumDistinctWays = temp; } return distinctWays; }
转载请注明原文地址: https://www.6miu.com/read-2619847.html

最新回复(0)