LeetCode——70. 爬楼梯

题目介绍

题干:
假设你正在爬楼梯。需要 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 阶

题解思路

做算法题总是逃不过这道经典的动态规划问题,相信大家和这道题也是老朋友了

对于动态规划思想,其实总结来说就是这几步
  1. 建立状态转移方程
  2. 缓存并复用以往结果
  3. 按顺序从小往大算

看起来简单,其实在自己做起来还是一脸懵,但是在遇到爬楼梯、斐波那契函数和不同路径问题后对解法也是熟能生巧

所以大家不需要看到动态规划就觉得生无可恋,只要判断好边界条件,从小到大,由难到易还是。。。。。。很难完成

开个玩笑,当我们还停留在动态规划处理基础问题的时候,大佬们都已经对有其他更优秀的解法了,各种数学模型和高数知识直接秀的我眼花缭乱

所以除了我列出的传统方法,建议大家去看官方题解的新方法,新方法的复杂度更优

正确代码

class Solution {
    public int climbStairs(int n) {
        //定义三个变量,q和p表示每个台阶的方法数,用r统计所有的和
        int p =0,q = 0,r = 1;
        for (int i = 0; i < n; i++) {
            p = q;
            q = r;
            r = p + q;
        }
        return r;
    }
}

总结

做完爬楼梯的话,为了巩固和加深印象建议去做做不同路径问题,也是十分优秀的动态规划问题

其实在做多了之后,你会发现其实只要不牵扯太复杂的问题,都还是可以慢慢分析做出解答的

所以在学习传统方法之余,接触新的方法和抽空学习高数模型和知识是学习算法十分必要的,何况以后学习人工智能这都是宝贵的经验

文章如果存在问题或者有更好的题解,希望大佬斧正和评论,各自努力,你我最高处见
posted @ 2021-03-03 12:03  21岁还不是架构师  阅读(67)  评论(0编辑  收藏  举报