算法不难的话,也挺简单的哈

简介: 算法不难的话,也挺简单的哈

题目


假设你正在爬楼梯,需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶,你有多少种不同的方法可以爬到楼顶呢?

难度:⭐


解法1:暴力递归


难度:⭐


优点:代码简洁优雅

缺点:对空间消耗较大,因此要好好考虑是不是真的适合使用递归来解决问题


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


解法2:递归优化


难度:⭐⭐

由于第一种方法有多余的计算,是没有必要的,因此可以优化,我的方案是使用map集合来存储计算过的值,每次计算时判断一下是否在集合中已经有了,有了就直接取出对应的 value ,这样就好多了。


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;
        }
    }
}


解法3:循环解决


难度:⭐⭐⭐

自底向上,累加计算,很简单,也很好理解 !!!


class Solution {
    public int climbStairs(int n) {
        int result = 0;
        int pre = 2;
        int prePre = 1;
        if(n == 1) return prePre;
        if(n == 2) return pre; 
        for(int i = 3;i<=n;i++){
            result = pre + prePre;
            prePre = pre;
            pre = result;  
        }
        return result;
    }
}


相关文章
|
10月前
|
算法
算法:图解递归算法的应用场景和使用途径
算法:图解递归算法的应用场景和使用途径
|
存储 编译器 C语言
【C】函数真的难嘛?其实一点也不难,原理很简单。
# 什么是函数 程序是由多个零件组合而成的,而函数就是这种“零件”的一个较小单位。 ## main函数和库函数 C语言程序中,main函数是必不可少的。程序运行的时候,会执行main函数的主题部分。main函数中使用了printf、scanf、puts等函数。由C语言提供的这些为数众多的函数称为库函数。 ## 什么是函数 当然,我们也可以自己创建函数。而实际上,我们也必须亲自动手创建各种函数。下面我们来自己创建一个简单的函数。 创建一个函数,接收两个整数参数,返回较大整数的值。 printf函数和scanf函数等创建得比较好得函数,即使不知道其内容,只要了解使用方法,也可以轻松使用。 ## 函
|
机器学习/深度学习 算法
【有营养的算法笔记】基础算法 —— 快速排序思路梳理和常见错误拔毛
【有营养的算法笔记】基础算法 —— 快速排序思路梳理和常见错误拔毛
153 0
【有营养的算法笔记】基础算法 —— 快速排序思路梳理和常见错误拔毛
|
搜索推荐 算法 C++
【基础算法】希尔排序法 & C++实现 | [实例过程详细分析]
希尔排序算法是基于插入排序法的思想,其又被称为希尔排序或者缩小增量排序。它的具体流程如下:(结合希尔排序算法代码段理解)
164 0
【基础算法】希尔排序法 & C++实现 | [实例过程详细分析]
代码随想录刷题|回溯算法理论 LetCode 77.组合
代码随想录刷题|回溯算法理论 LetCode 77.组合
代码随想录刷题|回溯算法理论 LetCode 77.组合
|
存储 算法
算法 | 二分查找?看一遍就够了
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素有序排列
85 0
算法 | 二分查找?看一遍就够了
|
算法 搜索推荐 C++
【算法】面试必备之0基础学算法 快速排序(详细讲解+私人笔记+代码展示)
二分查找又称折半查找、二分搜索、折半搜索等,是在分治算法基础上设计出来的查找算法,对应的时间复杂度为O(logn)。到这里是不是感觉很熟悉,我们前两期的算法知识,也是基于分治的方法去进行学习的,如果有这方面还不了解的朋友,你可以到我的第一篇文章(0基础学算法)里面去查看一下。
126 0
【算法】面试必备之0基础学算法 快速排序(详细讲解+私人笔记+代码展示)
|
人工智能 算法 搜索推荐
【算法】面试必备之0基础学算法 归并排序(详细讲解+私人笔记+代码展示)
归并排序是一个稳定的排序算法,在进行子数组合并的时候,我们可以设置当元素大小相等时,先将前半部分的数据放入临时数组,这样就可以保证相等元素在排序后依然保持原来的顺序,并且归并排序的执行效率与原始数据的有序程度无关,其时间复杂度是非常稳定的,都是O(nlogn) ...
128 0
【算法】面试必备之0基础学算法 归并排序(详细讲解+私人笔记+代码展示)
如何挖掘二叉树特性的「规律」解法 (含证明)| Java 刷题打卡
如何挖掘二叉树特性的「规律」解法 (含证明)| Java 刷题打卡