0
点赞
收藏
分享

微信扫一扫

leetcode-Climbing Stairs


leetcode-Climbing Stairs_动态规划

leetcode-Climbing Stairs_动态规划_02

本题的解法类似于斐波那契数列

记忆化搜索解法:

import java.util.Arrays;

/**
* Created by liuyubobobo.
*/
public class Solution1 {

private int[] memo;

public int climbStairs(int n) {
memo = new int[n+1];
Arrays.fill(memo, -1);
return calcWays(n);
}

private int calcWays(int n){

if(n == 0 || n == 1)
return 1;

if(memo[n] == -1)
memo[n] = calcWays(n - 1) + calcWays(n - 2);

return memo[n];
}

public static void main(String[] args) {

System.out.println((new Solution1()).climbStairs(10));
}

动态规划解法:

/// 70. Climbing Stairs
/// https://leetcode.com/problems/climbing-stairs/description/
/// 动态规划
/// 时间复杂度: O(n)
/// 空间复杂度: O(n)
public class Solution2 {

public int climbStairs(int n) {

int[] memo = new int[n + 1];
memo[0] = 1;
memo[1] = 1;
for(int i = 2 ; i <= n ; i ++)
memo[i] = memo[i - 1] + memo[i - 2];
return memo[n];
}

public static void main(String[] args) {

System.out.println((new Solution2()).climbStairs(10));
}
}

对比俩种算法, 我们发现,记忆化搜索的解法更容易理解,原因在于他还是使用了递归结构,而动态规划算法虽然理解稍难点,但写起来简洁,所以一般我们先通过使用记忆化搜索的思路去优化问题,再使用动态规划来写代码。注意首先这个问题必须是可以使用递归的,那么我们的解决思路就是 递归---》寻找重叠子问题----》记忆化搜索-----》动态规划

相似问题:

1.  120 Triangle

leetcode-Climbing Stairs_记忆化搜索_03

2. 64Minimum Path Sum

leetcode-Climbing Stairs_动态规划_04

举报

相关推荐

0 条评论