//一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
//
// 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
//
// 示例 1:
//
// 输入:n = 2
//输出:2
//
//
// 示例 2:
//
// 输入:n = 7
//输出:21
//
//
// 示例 3:
//
// 输入:n = 0
//输出:1
//
// 提示:
//
//
// 0 <= n <= 100
//
//
// 注意:本题与主站 70 题相同:https://leetcode-cn.com/problems/climbing-stairs/
//
//
// Related Topics 递归
// 👍 102 👎 0
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public int numWays(int n) {
//这个题是动态规划的题,其实最开始的思路应该就是找
//1.确定一个函数的功能,写一个函数
//2.确定整个递归结束的条件,方法就是把n放到最小,例如这个题,当n == 0 或者 n == 1时就是1
//3.确定递归等式(比方上一题斐波那契数列,等式直接给出,这个题,小青蛙跳台阶,先跳一次,然后还需要n - 1个台阶没有跳 ,剩下n-1台阶
//有numWays(n - 1)种跳法 ,先跳两个台阶,还有 n -2 个台阶没跳,有numWays(n - 2)种跳法总共就有numways(n - 1) + numways(n - 2)种跳法
if(n <= 1) return 1;
return numways(n - 1) + numways(n - 2);
//优化:上面算法,时间复杂度,O(2vn),
//这个思路就是,把以往算过的节点用个数组记录下来,是一种自底向上的方式时间复杂度O(n)
if(n <= 1) return 1;
int[] arr =new int[n+1];
arr[0] = 1;
arr[1] = 1;
for(int i = 2;i < arr.length;i++){
arr[i] = arr[i - 1] + arr[i - 2];
arr[i] %= 1000000007;
}
return arr[n] ;
}
}
//leetcode submit region end(Prohibit modification and deletion)
(剑指offer 10-2 小青蛙跳台阶)2021-01-04
最新推荐文章于 2022-11-20 23:15:07 发布