LeetCode 198. 打家劫舍
阿新 • • 發佈:2018-12-10
class Solution { public int rob(int[] nums) { if (nums.length == 0) { return 0; } if (nums.length == 1) { return nums[0]; } int[] dp = new int[nums.length]; dp[0] = nums[0]; dp[1] = Math.max(nums[0], nums[1]); for (int i = 2; i < nums.length; i++) { dp[i] = Math.max(nums[i] + dp[i - 2], dp[i - 1]); } return dp[nums.length - 1]; } }
這道題的兩個核心演算法步驟:
dp[1] = Math.max(nums[0], nums[1]);
dp[i] = Math.max(nums[i] + dp[i - 2], dp[i - 1]);
還是沒有在腦海中徹底弄清楚這個關係,先存下來,等段時間再仔細想想