LeetCode 198題是House Robber,是一個動態規劃問題。
題目描述
有一排房子,每個房子裡都有一定數量的金錢。你不能連續搶兩間相鄰的房子,否則會觸發警報。你的目標是計算出在不能搶相鄰房子的情況下可以搶劫的房子的最大金額。
解題想法
對於每一間房子,都有兩種選擇:
1.搶這間房子,然後跳過前一間。
2.不搶這間房子,只取前面房子的最大金額。
class Solution {
public int rob(int[] nums) {
if(nums == null || 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(dp[i-1],dp[i-2]+nums[i]);
}
return dp[nums.length-1];
}
}