首页 > 编程语言 >LeetCode 70. 爬楼梯 使用c++解答

LeetCode 70. 爬楼梯 使用c++解答

时间:2024-06-23 22:57:02浏览次数:40  
标签:楼顶 prev1 prev2 c++ current 3i 5i 70 LeetCode

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

提示:

  • 1 <= n <= 45

是一道有趣的题目,可以用来当成动态规划的入门练习

class Solution {
public:
    int climbStairs(int n) {
        if (n <= 1) {
            return 1;
        }
        int prev1 = 1;
        int prev2 = 1;
        for (int i = 2; i <= n; ++i) {
            int current = prev1 + prev2;
            prev1 = prev2;
            prev2 = current;
        }
        return prev2;
    }
};

  1. prev1 和 prev2 的含义:

    • prev1 表示爬到前一阶楼梯的方法数。
    • prev2 表示爬到前两阶楼梯的方法数。

 

例子分析

假设 n=5,即求解爬到第 5 个台阶的方法总数。

  1. 初始状态

    • prev1 = 1(f(1))
    • prev2 = 1(f(0))
  2. 迭代过程

    • i=2i = 2i=2:
      • current = prev1 + prev2 = 1 + 1 = 2(f(2))
      • 更新:prev1 = 1prev2 = 2
    • i=3i = 3i=3:
      • current = prev1 + prev2 = 1 + 2 = 3(f(3))
      • 更新:prev1 = 2prev2 = 3
    • i=4i = 4i=4:
      • current = prev1 + prev2 = 2 + 3 = 5(f(4))
      • 更新:prev1 = 3prev2 = 5
    • i=5i = 5i=5:
      • current = prev1 + prev2 = 3 + 5 = 8(f(5))
      • 更新:prev1 = 5prev2 = 8
  3. 结果

    • prev2 最终为 8,即爬到第 5 个台阶的方法总数。

标签:楼顶,prev1,prev2,c++,current,3i,5i,70,LeetCode
From: https://blog.csdn.net/m0_61862494/article/details/139888537

相关文章

  • LeetCode 28题找出字符串中第一个匹配项的下标
    给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从0开始)。如果 needle 不是 haystack 的一部分,则返回  -1 。示例1:输入:haystack="sadbutsad",needle="sad"输出:0解释:"sad"在下标0和6......
  • C++ 关联容器使用 map, unordered_map, set, unordered_set, multiset, unordered_mul
    关联容器是否有序是否关联值是否可重复访问时间set是否否对数map是是否对数multiset是否是对数multimap是是是对数unordered_map否是否常数unordered_set否否否常数unordered_multiset否否是常数unordered_multimap否是是常数#include<map>#include<set>#includ......
  • 【C++高阶】高效搜索的秘密:深入解析搜索二叉树
    ......
  • Leetcode 225. 用队列实现栈 && 232.用栈实现队列(jvav)
    225.用队列实现栈    题目:请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。    本题可采用一个队列或两个队列完成,这里我使用一个队列实现栈,更加简洁,理解起来也不难。    栈的特点是先进后出,队......
  • Leetcode150.逆波兰表达式求值(Java)
    题目:        给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。请你计算该表达式。返回一个表示表达式值的整数。    栈的典型例题。题目要求为:求后缀表达式值。示例 1:输入:tokens=["2","1","+","3","*"]输出:9解释:该算式......
  • C++11 标准库头文件模拟实现
    系列文章目录文章目录系列文章目录前言●智能指针模板●Vector1.简单版本2.X总结前言暂不考虑支持多线程常用STL的简单实现,主要内容百行左右完成,意在理解STL的原理●智能指针模板SharedPtr#include<assert.h>#include<atomic>template<classT......
  • LeetCode 209.长度最小的子数组
    链接209.长度最小的子数组-力扣(LeetCode)题目给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 子数组[numsl,numsl+1,...,numsr-1,numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。示......
  • CF1707E Replace
    题目描述给定一个长为\(n\)的序列\(a_1,\ldots,a_n\),其中对于任意的\(i\)满足\(1\leqa_i\leqn\)。定义一个二元组函数如下:\[f((l,r))=(\min\{a_l,\ldots,a_r\},\max\{a_l,\ldots,a_r\})(l\leqr)\]你需要回答\(q\)次询问,每次给定\((l_i,r_i)\),问其最少经过多少......
  • CF1770E Koxia and Tree
    题目描述给定一棵\(n\)个点的树,在\(k\)个位置上存在蝴蝶,我们需要给\(n-1\)条边定向,如果一条边的起点有蝴蝶且终点没有蝴蝶,那么蝴蝶将被移动到终点,我们会按照给定边的顺序移动,问最终所有蝴蝶的树上距离的和的期望,答案除于\(\frac{k(k-1)}{2}\),对\(998244353\)取模\[k\len\le300......
  • P9070 [CTS2023] 琪露诺的符卡交换
    题目描述琪露诺调查之后,发现一共有\(n\)种不同的卡片,每种卡片的数量总共恰好是\(n\)张,有\(n\)个人购买了这些卡片,每个人都恰好买了\(n\)张卡片,并且可能会买到相同种类的卡片。但是琪露诺想要让每个人都正好持有\(n\)种卡片,于是她把这\(n\)个人聚集在一起,想要通过卡......