力扣70爬楼梯

70. 爬楼梯 - 力扣(LeetCode)

和打家劫舍一样的思路

1.看如何到最后一步的

①跨一级台阶到

②跨两级台阶到

则:f(x) = f(x-1) + f(x-2)

f(x)是爬到x阶的方案数量

2.考虑边界

台阶有0、1阶时只有一种方案;

f(2) = 2

f(3)= 3

...

本质斐波那契数列

这里用打家劫舍利一样用到的滚动数组

直接上代码:

java 复制代码
class Solution {
    public int climbStairs(int n) {
        int p = 0, q = 0, r = 1;
        for (int i = 1; i <= n; ++i) {
            p = q; 
            q = r; 
            r = p + q;
        }
        return r;
    }
}

p即为f(i-2),q即为f(i-1),r即为当前台阶f(i),到达当前台阶的方法数目

官方给的图多看看:70_fig1.gif (1080×480)

方便for循环直接一次性解决所有问题,像上面这样写就不用考虑前两个特殊情况了

或者这样也行:

java 复制代码
class Solution {
    public int climbStairs(int n) {
        int p = 1;
        int q = 1;
        int r = 2;

        if (n == 1 ){return 1;}
        if (n == 2 ){return 2;}

        for(int i = 3; i <= n; i ++){
            p = q;
            q = r;
            r = p + q;
        }
        return r;
    }
}

其实都是一样的,无非是向前或向后延长两个位置

相关推荐
東隅已逝,桑榆非晚5 小时前
算法6. 双指针法-查找总价格为目标的两个商品
c++·学习·算法
Eyfcom6 小时前
〖物联网终端实战 01〗UWB 室内高精度定位:仓储 AGV 与人员的厘米级轨迹追踪
物联网·算法·物流系统·快递系统·跨境物流快递系统·物联网终端实战
bro_Java6666 小时前
《排序的底层逻辑:比较、交换与分治》
java·算法·排序算法
爱喝雪碧的可乐6 小时前
MATLAB
开发语言·算法·matlab
叼烟扛炮7 小时前
Linux 学习笔记(六十):单线程的逆袭——epoll 高并发服务器实战
linux·服务器·网络·笔记·学习·算法
careathers8 小时前
【数据结构】基于比较的排序算法 - 交换排序
数据结构·算法·排序算法
文丑颜不良啊8 小时前
LeetCode2081~2100题目解析
java·leetcode
H.莓飛8 小时前
【C++】【STL】vector_OJ题
linux·服务器·开发语言·数据结构·c++·visual studio
Rabitebla8 小时前
【Linux操作系统】进程篇(十一):进程程序替换——从底层原理到 exec 函数族
linux·服务器·c++·笔记·学习·算法
tellmewhoisi9 小时前
深度学习0:数学知识:正态分布1
人工智能·深度学习·算法