美文网首页
剑指 offer 学习之变态跳台阶

剑指 offer 学习之变态跳台阶

作者: Kevin_小飞象 | 来源:发表于2020-03-26 09:08 被阅读0次

    题目描述

    一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

    题目链接:牛客网

    解题思路

    动态规划

    import java.util.*;
    public class Main {
        
        public static void main(String[] args) {
            System.out.println(jumpFloorII(3));
            System.out.println(jumpFloorII(10));
        }
        
        public static int jumpFloorII(int target) {
            int[] dp = new int[target];
            Arrays.fill(dp, 1);
            for (int i = 1; i < target; i++) {
                for (int j = 0; j < i; j++) {
                    dp[i] += dp[j];
                }
            }
               
            return dp[target - 1];
        }
    }
    

    数学推导
    跳上 n-1 级台阶,可以从 n-2 级跳 1 级上去,也可以从 n-3 级跳 2 级上去...,那么

    f(n-1) = f(n-2) + f(n-3) + ... + f(0)
    

    同样,跳上 n 级台阶,可以从 n-1 级跳 1 级上去,也可以从 n-2 级跳 2 级上去... ,那么

    f(n) = f(n-1) + f(n-2) + ... + f(0)
    

    综上可得

    f(n) - f(n-1) = f(n-1)
    

    f(n) = 2*f(n-1)
    

    所以 f(n) 是一个等比数列

    public int jumpFloorII(int target) {
        return (int) Math.pow(2, target - 1);
    }
    

    测试结果

    image.png

    相关文章

      网友评论

          本文标题:剑指 offer 学习之变态跳台阶

          本文链接:https://www.haomeiwen.com/subject/rnrxuhtx.html