分类一:dp
1、打家劫舍
class Solution {
int max = 0;
public int rob(int[] nums) {
int len = nums.length;
int[][] dp = new int[len+1][2];
//dp[i][0]表示要偷第i家
//dp[i][1]表示不偷第i家
dp[0][0] = 0;
dp[1][1] = 0;
dp[0][1] = 0;
for(int i=1;i<=len;i++){
//0表示要偷,1表示不偷
//第i个要偷,就说明i-1没有偷
dp[i][0] = dp[i-1][1] + nums[i-1];
dp[i][1] = Math.max(dp[i-1][0],dp[i-1][1]);
}
return Math.max(dp[len][0],dp[len][1]);
}
}
2、零钱兑换
这道题一时间没有想到dp[i]该表示什么…所以看了一下题解
class Solution {
public int coinChange(int[] coins, int amount) {
int len = coins.length;
int[] dp = new int[amount+1];
dp[0]=0;
for(int i=1;i<=amount;i++){
dp[i]=amount+1;
for(int j=0;j<len;j++){
if(i>=coins[j])
dp[i