首页 > 其他分享 >LeetCode 精选100题-70题爬楼梯

LeetCode 精选100题-70题爬楼梯

时间:2023-11-05 23:32:19浏览次数:38  
标签:楼顶 map return int result climbStairs 70 100 LeetCode

题目描述:

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

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

思路:

  1. 第一阶楼梯:n =1,有一种方法 f(1)=1;
  2. 第二阶楼梯:n =2,有两种方法 f(2)=2;
  3. 当我们第一步爬了1个台阶时,我们可以有f(n-1)种方法爬到楼顶;
  4. 当我们第一步爬了2个台阶时,我们可以有f(n-2)种方法爬到楼顶;
  5. 第一步要么1个台阶要么2个台阶,所以我们共有方法:f(n)=f(n-1)+f(n-2) n>=3。

题解一(递归算法):

代码实现:

class Solution {
    public int climbStairs(int n) {
         if(n==1) return 1;
        if(n==2) return 2;

        return climbStairs(n-1) +climbStairs(n-2);
        }
}

LeetCode 精选100题-70题爬楼梯_爬楼梯

运行通过,但是这种方法时间复杂度为O(n²),超出时间限制。

LeetCode 精选100题-70题爬楼梯_爬楼梯_02

我们随便分析一个数字 n=6:

LeetCode 精选100题-70题爬楼梯_爬楼梯_03

其中一些数字不止算了一遍,我们可以选择map集合,以n为Key,算出的值放入map的Value,计算值时先看是否存在已计算过的值,若没有去计算,放入map。

class Solution {
    private Map<Integer,Integer> map =new HashMap();
    public int climbStairs(int n) {
        if(n==1) return 1;
        if(n==2) return 2;
        if(null != map.get(n)){
            return map.get(n);
        }else{
            int result = climbStairs(n-1) +climbStairs(n-2);
            map.put(n,result);
            return result;
        }

    }
}

LeetCode 精选100题-70题爬楼梯_递归算法_04

题解二:

还是这张图:

LeetCode 精选100题-70题爬楼梯_爬楼梯_05

  1. f(3)和f(2)可以得到 f(4);
  2. f(4)和f(3)可以得到 f(5);
  3. f(5)和f(4)可以得到 f(6);

......

class Solution {
		public int climbStairs(int n) {
        if(n == 1) return 1;
        if(n == 2) return 2;

        int pre = 2;
        int prePre = 1;
        int result = 0;
        for(int i=3;i<=n;++i){
            result = pre + prePre;
            prePre =pre;
            pre=result;

        }
        return result;
    }
  }

LeetCode 精选100题-70题爬楼梯_LeetCode_06



















标签:楼顶,map,return,int,result,climbStairs,70,100,LeetCode
From: https://blog.51cto.com/u_16280730/8196857

相关文章

  • cf1709E. XOR Tree(启发式合并入门)
    cf1709E.XORTree贪心是显然的,关键是如何合并两棵子树的信息,可以采用启发式合并。#include<cstdio>#include<algorithm>#include<cstring>#include<cmath>#include<map>#include<vector>#include<set>#include<ctime>#include<unordered_ma......
  • LeetCode/在树上执行操作以后得到的最大分数
    有一棵n个节点的无向树,节点编号为0到n-1,根节点编号为0。给你一个长度为n-1的二维整数数组edges表示这棵树,其中edges[i]=[ai,bi]表示树中节点ai和bi有一条边。同时给你一个长度为n下标从0开始的整数数组values,其中values[i]表示第i个节点的值......
  • LeetCode101.对称二叉树
    题目描述给你一个二叉树的根节点root,检查它是否轴对称。示例提条的代码importjava.util.List;importjava.util.ArrayList;importjava.util.Deque;importjava.util.LinkedList;importjava.util.Collections;classSolution{publicbooleanisSymmetric(Tr......
  • [LeetCode] 1535. Find the Winner of an Array Game
    Givenanintegerarrayarrofdistinctintegersandanintegerk.Agamewillbeplayedbetweenthefirsttwoelementsofthearray(i.e.arr[0]andarr[1]).Ineachroundofthegame,wecomparearr[0]witharr[1],thelargerintegerwinsandremainsat......
  • leetcode 第一题 两数之和
    题目给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。 初级阶段Java ......
  • 输出1至100中所有的奇数
    count=1whilecount<=100:ifcount%2==1:print(count)count=count+1运行结果显示:     ......
  • 求和 1+2+3+4+5+6+7+8......+100=?
     sum=0foriinrange(1,101,1):sum=sum+iprint(sum)运行以上代码,显示结果: ......
  • AMD正式发布Zen4+Zen4c新锐龙7000U:真不是“大小核”!
    一直以来有传闻称,AMD锐龙7040U系列处理器的两款入门级型号锐龙57540U、锐龙37440U,用的都是Zen4、Zen4c混合架构,甚至曝光了各种规格参数、内核布局图。结果呢,也对,也不对。此前发布的锐龙57540U、锐龙37440U,和更高端的锐龙77840U、锐龙57640U一样都是纯粹的Zen4架构。现......
  • P2370 yyy2015c01 的 U 盘
    P2370yyy2015c01的U盘基础思路看到题目要求最小需要的最大接口。自然认为既然答案要求接口,那状态方程的值就是接口。一开始状态方程F[i][j],\(i\)为前\(i\)个接口,\(j\)为当前体积。而F[i][j]则为当前最小的最大接口值状态转移方程F[i][j]=min(F[i][j],(F[i-1][j-v[......
  • 【刷题笔记】100. Same Tree
    题目Giventwobinarytrees,writeafunctiontocheckiftheyarethesameornot.Twobinarytreesareconsideredthesameiftheyarestructurallyidenticalandthenodeshavethesamevalue.Example1:Input:11/\/\......