Leetcode——198. 打家劫舍
题目描述:题目链接
这道题目也是一道动态规划的题目:
分析一道动态规划的题目可以将解决问题的思路分为下面三个部分:
1:问题的描述。可以定义数组d[ i ] 用于表示第i -1家可以获得的最大金额。
2:给出递推公式:d[ i ] = max( d[i-1] , d[i-2] + nums[i] );
3:给出递推公式的初始值:d[0] = nums[0], d[1] = max( nums[0] , nums[1] );
下面可以根据上面的思路给出本题的解决思路:
class Solution { public int rob(int[] nums) { int len = nums.length; if(len == 0){ return 0; } if(len == 1){ return nums[0]; } //定义数组d[i]为i+1家可以获得的最大数 int[] d = new int[len]; d[0] = nums[0]; d[1] = Math.max(nums[0],nums[1]); if(len == 2){ return d[1]; } int max = -1; for(int i = 2; i < len ; i++){ d[i] = Math.max(d[i-1],d[i-2]+nums[i]); if(d[i] >= max){ max = d[i]; } } return max; } }