当前位置: 首页 > article >正文

【力扣】[Java版] 刷题笔记-70. 爬楼梯

题目:70. 爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

解题思路

分析前几层级楼梯的结果,前5层的结果分别是1,2,3,5,8,从第三项开始,每一项都等于前两项之和,这个结果是符合斐波那契数列的,可以按斐波那契数列的规律或公式求解。

解题过程

第一种:这里先按结果规律编写方程,即从第三项开始,每一项都等于前两项之和。

class Solution {
    public int climbStairs(int n) {
        if (n < 4) {
            return n;
        }
        // 斐波那契数列 
        //n:   1 2 3 4 5 
        //结果  1 2 3 5 8
        int p = 2, q = 3, r = 0;
        for (int i = 3; i < n; i++) {
            r = p + q;
            p = q;
            q = r;            
        }
        return r;
    }
}

复杂度

  • 时间复杂度: O(n)
  • 空间复杂度: O(1) 

第二种: 用斐波那契数列的公式

class Solution {
    public int climbStairs(int n) {
        if (n < 1 || n > 45) {
            return -1;
        }
        if (n < 3) {
            return n;
        }
        //  Math.sqrt 开根号
        double sqrt5 = Math.sqrt(5);
        double fibn = Math.pow((1 + sqrt5) / 2, n + 1) - Math.pow((1 - sqrt5) / 2, n + 1);
        return (int) Math.round(fibn / sqrt5);
    }
}

复杂度

  • 时间复杂度: O(1)
  • 空间复杂度: O(1) 

直接用数学公式解决不仅方便还快 ~


http://www.kler.cn/a/369089.html

相关文章:

  • 前端零基础入门到上班:【Day1】什么是前端?
  • 【OpenAI】第五节(图像生成)利用 OpenAI 的 DALL·E 实现自动化图像生成:从文本到图像的完整教程
  • 单反相机内存卡误删照片怎么办?别急,这里有恢复方法
  • 如何搭建直播美颜SDK平台的最佳实践?美颜API的实现与集成详解
  • 【IC每日一题】
  • 以bat脚本实现自动识别盘符名称
  • JavaScript 前端开发
  • Python 网络爬虫:基础与实践
  • Java并发学习总结:原子操作类
  • python:如何判断一个数是否为素数
  • Go语言初识
  • 基于Python和OpenCV的疲劳检测系统设计与实现
  • 解决vue使用pdfdist-mergeofd插件时报错polyfills
  • VMware各版本下载的镜像站(含windows和linux)
  • ptp4l协议_配置文件
  • 【JIT/极态云】技术文档--函数设计
  • java :String 类
  • ReactOS系统中平衡二叉树,在一个空间中寻找与给定地址范围重合或部分重合的(已分配)区间
  • Python 实现日期计算与日历格式化输出(万年历)
  • Qt 窗口可见性 之 close函数和hide函数
  • [Go实战]:HTTP请求转发
  • 电商平台店铺运营:巧用 API 接口的策略之道
  • jemalloc替换标准库 malloc等函数的三种方式
  • 宿舍管理新篇章:基于Spring Boot的系统开发
  • 验证俩套加密算法是否互通
  • [思考记录]做事别忘最初目的