题目:
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路:
方法一:暴力解法
public class Solution { public int JumpFloorII(int target) { if(target==0){ return 0;//起点没跳,则为0 } int []dp=new int[target+1];//用于存储f(i)的步数 dp[0]=1; for(int i=1;i<=target;i++){//从1到目标台阶 for(int j=0;j<i;j++){//累加,从0加到i dp[i]+=dp[j];//存入数组 } } return dp[target]; } }
方法二:优化,从数学角度将目标规律找出
易知
f(n)=f(n-1)+f(n-2)+……f(1)
f(n-1)=f(n-2)+……f(1)
两式相减得f(n)=2f(n-1)
当然,你会发现一个规律:
f[0] = f[1] = 1 f[2] = 2 = 21 f[3] = 4 = 22 f[4] = 8 = 23
public class Solution { public int JumpFloorII(int target) { return (int)Math.pow(2,target-1)//pow()方法为第二参数是第一个参数的次方 } }