变态跳台阶

题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
1.动态规划
台阶   跳法
 0           1
 1           1
 2           2
 3           4
 4           8
 看到这大概就差不多发现规律了,从第三项开始等于前面所有项的和,所以可以写出如下代码:
public class Solution {
    public int JumpFloorII(int n) {
        int []a=new int [n+1];
        a[1]=1;
        a[0]=1;
        if(n==1) return a[1]; 
        int s=1;
        for(int i=2;i<=n;i++){
         for(int j=0;j<i;j++){
          a[i]+=a[j];   
         }   
         
        }
        return a[n];
    }
}
如果去掉台阶数为0的情况可以得到a[i]=2*a[i-1]的规律,所以直接单重循环就足够了
台阶   跳法
 1           1
 2           2
 3           4
 4           8
代码如下:
public class Solution {
    public int JumpFloorII(int n) {
        int []a=new int [n+1];
        a[1]=1;
        if(n==1) return a[1]; 
        int s=1;
        for(int i=2;i<=n;i++){
        a[i]=a[i-1]*2;
        }

        return a[n];
    }
}

2.迭代

在发现a[i]=2*a[i-1]的情况下可以直接选择迭代;

代码如下:

public class Solution {
    public int JumpFloorII(int n) {

        int s=1;
        
        for(int i=2;i<=n;i++){
        s*=2;
        }

        return s;
    }
}
不一样的烟火
原文地址:https://www.cnblogs.com/cstdio1/p/11232223.html