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. 最长重复子数组