leetcode-剑指 Offer 10- II. 青蛙跳台阶问题

本题参考以下文章:
点击进入该文章

该文章采用了三种解法

题目描述
在这里插入图片描述
解法:(仅仅展示解题类)
第1种:采用递归算法(算法时间复杂度高)

class chuli {
    public int tiao(int n) {
        if (n == 0) {
            return 1;
        }
        if (n == 1) {
//            n=1 的话只有一种方案  返回1
            return 1;
        }
        if (n == 2) {
//            n=2的话有两种方案(跳一节台阶活着二阶台阶)返回2
            return 2;
        }
//				递归调用
        return tiao(n - 1) + tiao(n - 2);
    }
}

第2种:采用递归算法+上备忘录缓存(算法时间复杂度进行降低)

class chuli{
  public Map<Integer, Integer> temp = new HashMap<>();
    public int tiao(int n){
        if (n == 0) {
            return 1;
        }
        if (n == 1) {
//            n=1 的话有一种方案
            return 1;
        }
        if (n == 2) {
//            n=2的话有两种方案
            return 2;
        }
        if(temp.containsKey(n)){//备忘录里面存在这个次数
            return  temp.get(n);
        }else{//备忘录中不存在次数需要 先进行递归调用 后缓存到备忘录 然后进行取出
            temp.put(n,tiao(n-1)+tiao(n-2));
            return temp.get(n);
        }
    }
   }

第3种:动态规划
这点熟练度不高 懂得较少

class chuli{
    public int tiao(int n) {
        if (n<= 1) {
            return 1;
        }
        if (n == 2) {
            return 2;
        }
        int a = 1;
        int b = 2;
        int temp = 0;
        for (int i = 3; i <= n; i++) {
    //大数取模  对一个大数质数取模得到的还是原来值
            temp = (a + b)% 1000000007;
     //temp=a+b
            a = b;
            b = temp;
        }
        return temp;
    }
}
/*本解的思路为:  从1,2阶台阶向上分析。
	因为第n阶台阶的跳法登陆第n-1和n-2阶台阶的跳法总和,所以我们通过递推得出结论。将每节台阶都进行向上记录然后最终得出第n阶台阶的总跳法数。
	至此,我们需要保存两个数,即n-1和n-2。
	然后根据这两个数推上去得到想要的台阶数。
*/

动态规划的特征:最优子结构、状态转移、边界、子调用重叠问题
动态规划的解题思路:核心:拆分子问题、记录重复记录减少计算量。
穷举分析 ->确定边界 ->找出规律 ->找出不同状态跳转的方法

总结

简单解题3种方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值