青蛙跳台阶

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

例子:
青蛙跳台阶_第1张图片
代码1:(递归法)

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

代码1解释
从后往前推,当青蛙跳到最后一步的时候,无非就是跳两步或者跳一步两种情况。结束条件就是当跳一步一种方法,在原点一种方法(带入得出)。但是在代码里边有很多重复计算。所以此题最好用动态规划,或者循环求解法。

代码2:(动态规划法):

class Solution {
    public int numWays(int n) {
        if(n < 2) return 1;
		//n+2因为转移方程式要求
        int[] dp = new int[n+2];
        dp[0] = 1; dp[1] = 1; 
        for(int i = 2; i <= n+1; i++){
            dp[i] = (dp[i-1]+dp[i-2]) % 1000000007;
        }
        return dp[n];
    }
}

代码3:(循环求解法)

class Solution {
    public int numWays(int n) {
        int a = 1, b = 1, sum;
        for(int i = 0; i < n; i++){
            sum = (a + b) % 1000000007;
            a = b;
            b = sum;
        }
        return a;
    }
}

代码3解释:
相对动态规划法,不需要额外的O(N)的空间复杂度了

你可能感兴趣的:(力扣刷题,leetcode,算法,职场和发展)