力扣第16刷-爬楼梯

简介: 力扣第16刷-爬楼梯

Example 18

爬楼梯

题目概述:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

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

示例 1:

输入:n = 2

输出:2

解释:有两种方法可以爬到楼顶。

1. 1 阶 + 1 阶

2. 2 阶

示例 2:

输入:n = 3

输出:3

解释:有三种方法可以爬到楼顶。

1. 1 阶 + 1 阶 + 1 阶

2. 1 阶 + 2 阶

3. 2 阶 + 1 阶

解题思路:用f(x) 表示爬到第x 级台阶的方案数,考虑最后一步可能跨了一级台阶,也可能跨了两级台阶,所以可以列出如下式子:

f(x)=f(x−1)+f(x−2)

它意味着爬到第x 级台阶的方案数是爬到第x−1 级台阶的方案数和爬到第x−2 级台阶的方案数的和。很好理解,因为每次只能爬1 级或2 级,所以f(x) 只能从f(x−1) 和f(x−2) 转移过来,而这里要统计方案总数,就需要对这两项的贡献求和。

解题步骤:

1. 若n为1,返回1,若n为2,返回2。

2. 定义变量p、q、r分别代表f(x - 2)、f(x - 1)、f(x)的函数值。

3. 定义for循环,从3至n开始考察,令p = q、q = r、r = p + q,即令本轮的f(x - 2)等于上轮的f(x - 1),本轮的f(x - 1)等于上轮的f(x),本轮的f(x)等于本轮的f(x - 1)与本轮的f(x - 2)之和。

4. n是从3开始,因此在第2步定义变量赋初值时,第三轮的p为第2轮的q即第一轮的r,即f(1),第三轮的q为第2轮的r,即f(2),因此将q赋初值为1,r赋初值为2。

5. 循环结束后将r返回,即为爬n节台阶的方式数目。

 

示例代码如下:

public class ClimbStairs {
    /**
     * 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
     * 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
     * 示例 1:
     * 输入:n = 2
     * 输出:2
     * 解释:有两种方法可以爬到楼顶。
     * 1. 1 阶 + 1 阶
     * 2. 2 阶
     * 示例 2:
     * 输入:n = 3
     * 输出:3
     * 解释:有三种方法可以爬到楼顶。
     * 1. 1 阶 + 1 阶 + 1 阶
     * 2. 1 阶 + 2 阶
     * 3. 2 阶 + 1 阶
     * 来源:力扣(LeetCode)
     * 链接:https://leetcode.cn/problems/climbing-stairs
     */
    public static void main(String[] args) {
        ClimbStairs cs = new ClimbStairs();
        System.out.println(cs.climbStairs(3)); // 3
    }
    /**
     * 个人参考官方
     *
     * @param n
     * @return
     */
    public int climbStairs(int n) {
        if (n == 1) return 1;
        if (n == 2) return 2;
        int p = 0, q = 1, r = 2;
        for (int i = 3; i <= n; ++i) {
            p = q;
            q = r;
            r = p + q;
        }
        return r;
    }
    /**
     * 官方
     * @param n
     * @return
     */
/*    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;
    }*/
}
相关文章
|
Java 数据库连接
nacos2.0.3报错No Datasource Set
nacos2.0.3报错No Datasource Set com.mysql.cj.exceptions.CJException: Public Key Retrieval is not allowed
nacos2.0.3报错No Datasource Set
|
开发框架 安全 .NET
文件上传绕过】——解析漏洞_IIS6.0解析漏洞
文件上传绕过】——解析漏洞_IIS6.0解析漏洞
470 4
|
8月前
|
JSON API 数据格式
阿里巴巴商品详情接口(阿里巴巴 API 系列)
在电商开发中,获取阿里巴巴商品详情信息对数据分析、竞品研究等至关重要。通过调用其商品详情接口,开发者可获取标题、价格、图片、描述等数据,满足多种业务需求。接口采用HTTPS协议,支持GET/POST请求,返回JSON格式数据。示例代码展示了如何使用Python的requests库进行接口请求,需传递商品ID和访问令牌。实际应用时,请依据官方文档调整参数并确保安全性。
262 10
|
6月前
|
机器学习/深度学习 JSON 自然语言处理
Flutter敏感词过滤实战:基于AC自动机的高效解决方案
在社交、直播等场景中,敏感词过滤至关重要。本文介绍基于AC自动机的Flutter高效敏感词过滤方案,通过构建Trie树与失败指针实现线性时间复杂度的多模式匹配,支持干扰字符处理与动态优化。代码实战结合性能对比,助你打造毫秒级响应的过滤系统,适用于聊天、评论、内容审核等场景,保障平台安全。
346 69
|
6月前
|
人工智能 供应链 机器人
AI浪潮下,大中型企业如何打造智能型的CRM系统
本文分析了纷享销客CRM作为大中型企业智能化转型伙伴的核心优势。其“连接型CRM”理念结合PaaS平台灵活性,实现企业内外部深度协同;AI能力场景化赋能销售与服务,提升效率与体验;功能全面且集成性强,支持复杂业务需求。尽管初始投入较高,但其市场验证的增长表现和战略价值,使其成为大中型企业构建长期竞争优势的优选方案。
|
人工智能 Oracle 关系型数据库
一篇文章弄懂Oracle和PostgreSQL的Database Link
一篇文章弄懂Oracle和PostgreSQL的Database Link
|
10月前
|
物联网
革新固定资产盘点:首码资产管理系统如何助力企业降本增效?
首码固定资产管理系统创新性地引入了三种高效盘点方式:手机扫二维码、全员自助和RFID批量识别,大幅提升了企业盘点效率与准确性。手机扫码盘点通过移动应用快速获取资产信息,灵活便捷且实时更新;全员自助盘点分散任务,提高参与度和责任感;RFID技术实现远距离批量识别,自动化操作节省人力。这三种方式共同助力企业降低盘点成本,优化资产管理流程。
254 0
|
安全 物联网 智能硬件
低功耗广域网的代表主要有LORA和NB-IOT和TPUNB
本文对比介绍了三种低功耗广域网技术——LoRa、NB-IoT和TPUNB。LoRa利用扩频技术实现远距离、低功耗通信,适用于智能城市和环境监测。NB-IoT基于蜂窝网络,提供广覆盖和长电池寿命,常用于智能电表和智能停车。TPUNB是技象科技的自主LPWAN技术,具备高安全性和抗干扰性,适用于智慧城市和工业物联网。这些技术各有优势,满足不同场景需求,推动了物联网的发展。
997 1
|
12月前
|
机器学习/深度学习 存储 自然语言处理
【电商搜索】现代工业级电商搜索技术-Facebook语义搜索技术QueSearch(上)
【电商搜索】现代工业级电商搜索技术-Facebook语义搜索技术QueSearch(上)
184 0
|
自然语言处理 C# 图形学
使用dnSpyEx对.NET Core程序集进行反编译、编辑和调试
使用dnSpyEx对.NET Core程序集进行反编译、编辑和调试
216 0