LC 70.爬楼梯

2024-04-14 20:36
文章标签 70 爬楼梯 lc

本文主要是介绍LC 70.爬楼梯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

70.爬楼梯

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

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

示例 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 1 \leq n \leq 45 1n45

解法一(动态规划)

思路分析:

  1. 对于多个子问题,采用动态规划算法;按照动规五部曲进行求解;
  2. 确定dp数组以及下标含义,即dp[i]表示第i个台阶,有多少种方法可以爬到
  3. 然后推导递推公式;因为一次可以爬1或2个台阶,即若要到达第i个台阶,可以由第i-1个台阶爬1个台阶到达,也可以由第i-2个台阶爬2个台阶到达,即到达第i个台阶的方法为,到达第i-1个台阶的方法和到第i-2个台阶方法的总和,即状态转移方程为:dp[i] = dp[i-1] + dp[i-2]
  4. 然后确定dp数组的初始化,可以简单得出;对于到第一阶台阶,由一种方法,对于到第二阶方法,有两种方法,即dp[1] = 1; dp[2] = 2
  5. 然后确定遍历顺序,即从i=3开始遍历到i=n;因为状态转移方程需要先得到状态dp[i-1]dp[i-2],否则无法得到正确的当前状态dp[i]
  6. 打印dp数组,确定是否符合思路与题意

实现代码如下:

class Solution {public int climbStairs(int n) {if (n == 1 || n == 2)return n;int[] dp = new int[n+1];dp[1] = 1;dp[2] = 2;for (int i = 3; i <= n; ++ i) {dp[i] = dp[i-1] + dp[i-2];}return dp[n];}
}

提交结果如下:

解答成功:
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:39.5 MB,击败了5.28% 的Java用户

复杂度分析:

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

解法二(状态压缩)

思路分析:

  1. 由解法一得到的状态转移方程;得知下一个状态由可表达的两个状态得出
  2. 即可以对状态数组进行压缩,使用变量ans来表示下一个需要得到的状态,使用变量ab来表示需要的两个状态

实现代码如下:

class Solution {public int climbStairs(int n) {if (n == 1 || n == 2)return n;int ans = 0;// 初始状态int a = 1, b = 2;for (int i = 3; i <= n; ++ i) {ans = a + b;	// 状态转移a = b;b = ans;}return ans;}
}

提交结果如下:

解答成功:
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:39.4 MB,击败了47.08% 的Java用户

复杂度分析:

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

这篇关于LC 70.爬楼梯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/903954

相关文章

代码随想录训练营day37|52. 携带研究材料,518.零钱兑换II,377. 组合总和 Ⅳ,70. 爬楼梯

52. 携带研究材料 这是一个完全背包问题,就是每个物品可以无限放。 在一维滚动数组的时候规定了遍历顺序是要从后往前的,就是因为不能多次放物体。 所以这里能多次放物体只需要把遍历顺序改改就好了 # include<iostream># include<vector>using namespace std;int main(){int n,m;cin>>n>>m;std::vector<i

70-java write类应用场景

在Java中,我们可以使用java.io包中的FileWriter和BufferedWriter类来写入数据到文件。以下是一个简单的例子,展示了如何使用FileWriter和BufferedWriter来写入数据到文件: import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;pub

代码随想录算法训练营Day37|完全背包问题、518.零钱兑换II、377. 组合总和 Ⅳ、70. 爬楼梯(进阶版)

完全背包问题                  和01背包最大区别就是一个物品可以重复放多次,因此遍历空间时可以从前往后。 import java.util.*;public class Main{public static void main (String[] args) {Scanner sc = new Scanner(System.in);int m = sc.nextInt

leetcode#70. Climbing Stairs

题目 You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? Note: Given n will be a posi

每日一练5:最小花费爬楼梯(含链接)

1.链接 最小花费爬楼梯_牛客题霸_牛客网 2.题目 3.代码 class Solution {public:int minCostClimbingStairs(vector<int>& cost) {vector<int> dp(cost.size() + 1);dp[0] = 0;dp[1] = 0;for(int i = 2; i <= cost.size() ; i++){d

[Day 70] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

區塊鏈在房地產中的應用 1. 引言 區塊鏈技術的崛起為各行各業帶來了顯著的變革,房地產行業也不例外。區塊鏈提供的去中心化、透明、安全的特性,使其在房地產領域的應用前景廣闊。本文將探討區塊鏈在房地產中的應用,並通過示例代碼展示如何實現相關功能。 2. 區塊鏈在房地產中的應用場景 2.1 資產數字化 傳統的房地產交易涉及繁瑣的文書工作和第三方機構,如地產經紀人和登記機構。區塊鏈可以將房地產資

爬楼梯[简单]

优质博文:IT-BLOG-CN 题目 假设你正在爬楼梯。需要n阶你才能到达楼顶。 每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。 1阶 + 1阶2阶 示例 2: 输入:n = 3 输出:3 解释:有三种方法可以爬到楼顶。 1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶 1

Axure健康助理小程序原型图70+页,医疗类高保真高交互模板

作品概况 页面数量:共 70+ 页 源文件格式:限 Axure RP 9/10,非app软件无源码 适用领域:医疗健康、健康助理 作品特色 本作品为健康助理小程序的Axure原型设计图,属于医疗健康项目,设计规范内容清晰,高保真高交互,欢迎想了解医疗健康行业的同学观摩学习,希望对你有所帮助。 该产品的定位属于第三方互联网医疗服务平台,致力于为用户提供客观可信赖的医疗信息服务。产品未来所提供

从实验室到应用:LC-MS/MS技术与AbMole化合物共舞,揭开半胱氨酸靶向共价抑制剂的新篇章

在生物化学的广阔舞台上,共价抑制剂作为一类特殊的分子“捕手”,它们通过形成稳定的共价键精准捕获目标蛋白的半胱氨酸残基,从而调节其功能。近期,一项由澳门科技大学、暨南大学和中国科学院神经科学研究所携手完成的研究,利用先进的LC-MS/MS技术,结合AbMole BioScience Inc提供的高品质化合物,成功筛选出多种潜在的半胱氨酸靶向共价抑制剂,为科学界带来了一场激动人心的发现之旅。 共价抑

AI预测体彩排3采取888=3策略+和值012路或胆码测试9月2日升级新模型预测第70弹

经过近70期的测试,当然有很多彩友也一直在观察我每天发的预测结果,得到了一个非常有价值的信息,那就是9码定位的命中率非常高,已到达90%的命中率,这给喜欢打私菜的朋友提供了极高价值的预测结果~当然了,大部分菜友还是走的正常渠道,因此,得想办法进行缩水,尽可能少的缩少注数。         当然了,经过近70期的观察和内部测试,发现了如果不考虑8码定位,而是重点把大底放在9码定位上