0
点赞
收藏
分享

微信扫一扫

算法问题——动态规划问题集合


​​70. 爬楼梯​​

/**
* Copyright (C), 2018-2020
* FileName: 爬楼梯的基础题
* Author: xjl
* Date: 2020/9/7 9:39
* Description:
*/
package 深度优先广度优先问题;

public class 爬楼梯的基础题 {
/**
* 使用的递归的方法 使用的是暴力的求解
*
* @param n
* @return
*/
public int climbstairs(int n) {
if (n == 1 || n == 2) {
return n;
}
return climbstairs(n - 1) + climbstairs(n - 2);
}

/**
* 记忆化递归的思想
*
* @param n
* @return
*/
public int solution(int n) {
//这个是记忆的数组 记录是的每一个台阶的方法
int[] memeo = new int[n + 1];
return climbstairs1(n, memeo);
}

private int climbstairs1(int n, int[] memeo) {
if (memeo[n] > 0) {
return memeo[n];
}
if (n == 1 || n == 2) {
memeo[n] = n;
} else {
memeo[n] = climbstairs1(n - 1, memeo) + climbstairs1(n - 2, memeo);
}
return memeo[n];
}

/**
* 使用动态规划的思想
*
* @param n
* @return
*/
public int solution1(int n) {
if (n == 1) {
return 1;
}
//表示的是的dp[]的转态 表示的有多少种方法
int[] dp = new int[n + 1];
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= n; i++) {
//使用的是的dp[i]=dp[i-1]+dp[i-2];
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
}

​​978. 最长湍流子数组​​

​​53. 最大子序和​​

​​面试题 08.01. 三步问题​​

​​746. 使用最小花费爬楼梯​​

​​712. 两个字符串的最小ASCII删除和​​

​​647. 回文子串​​

​​866. 回文素数​​

​​131. 分割回文串​​

​​132. 分割回文串 II​​

​​516. 最长回文子序列​​

​​354. 俄罗斯套娃信封问题​​

​​1312. 让字符串成为回文串的最少插入次数​​

​​198. 打家劫舍​​

​​213. 打家劫舍 II​​

​​337. 打家劫舍 III​​

​​931. 下降路径最小和​​

​​1289. 下降路径最小和 II​​

​​120. 三角形最小路径和​​

​​91. 解码方法​​

​​62. 不同路径​​

​​63. 不同路径 II​​

​​980. 不同路径 III​​

​​64. 最小路径和​​

​​718. 最长重复子数组​​

举报

相关推荐

0 条评论