学习目标:拿下LeetCode70.爬楼梯
- 学习完本文章之后拿下LeetCode70题
题目实例:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
样例1、输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
- 1 阶 + 1 阶
- 2 阶
样例2、输入:n = 3
输出:3
解释:有三种方法可以爬到楼顶。
- 1 阶 + 1 阶 + 1 阶
- 1 阶 + 2 阶
- 2 阶 + 1 阶
题目分析:
本题采用画图解释,最初我们定义三个变量,p和q都给0,而r值给1,那么这是为什么呢?
当我们没踏入台阶的时候,我们就假设他为1,也就是f(0) = 1,那么我们走一个台阶是不是也是1个呢?所以是f(1) = 1,当我们走两个台阶的时候是不是就有两种走法了呢?所以是f(2) = 2
从以上的推导我们可以推导出一个公式那就是:f(x) = f(x-1)+f(x-2),继续推导下去,我们发现就跟我们的推导公式是一样滴!!,那么我们是不是应该进入代码的实现的呢?
在学习的过程中,我们要学会多多的画图,因为画图好让我们更好的理解代码的意思,并且更好的实现我们的代码,我们实现代码的过程中千万不能忘记,过了一段时间要来巩固自己之前所学的知识!!好啦,今天的讲解到此结束啦!
代码产出:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int climbStairs(int n) {
int q = 0, p = 0, r = 1;
for (int i = 1; i <= n; i++)
{
q = p;
p = r;
r = p + q;
}
return r;
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = climbStairs(n);
printf("%d", ret);
return 0;
}