问题:
假设你正在爬楼梯。需要 n
阶你才能到达楼顶。
每次你可以爬 1
或 2
个台阶。你有多少种不同的方法可以爬到楼顶呢?
思路:
第一层 只有 1;
第二层 有两种 1,1;2。
第三层要么是从一层上来,要么从二层上来。
推出n层要么是从n-1层上来,要么从n-2层上来。(动态规划)
所以
使用动态规划的思想可以解决。
下面段代码定义了一个名为 Solution
的类,其中有一个公有成员函数 climbStairs
,接受一个整数参数 n
,表示要爬的楼梯数。
在函数中,首先对输入的 n
进行了特判,如果 n
等于 1,则只有一种爬法,返回 1;如果 n
等于 2,则有两种爬法,返回 2。
接着定义了三个变量 a
、b
和 temp
,其中 a
初始化为 1,b
初始化为 2,temp
用于交换 a
和 b
的值。
然后使用循环从 3 到 n
遍历,每次都将 temp
赋值为 a
,a
赋值为 b
,b
赋值为 temp + b
,即将前两个数之和赋值给第三个数。最后返回 b
即可得到爬到第 n
级台阶的方法数。
class Solution {
public:
int climbStairs(int n) {
if(n == 1){return 1;}
if(n == 2){return 2;}
int a = 1, b = 2, temp;
for(int i = 3; i <= n; i++){
temp = a;
a = b;
b = temp + b;
}
return b;
}
};