---
# System prepended metadata

title: 0198. House Robber
tags: [Leetcode, Dynamic Programming, Medium]

---

# 0198. House Robber
###### tags: `Leetcode` `Medium` `Dynamic Programming`
Link: https://leetcode.com/problems/house-robber/
## 思路
这是“双状态”DP最典型的一道题。它的特点是：**每一轮的状态只取决于上一轮的状态**；并且每一轮的状态只有两种，通常就是“取”或“不取”。

结合本题来说，是否打劫第k间房子（的收益），完全取决于是否打劫第k-1间房子（的收益）
![](https://i.imgur.com/e5MSWg3.png)
由于只在于前一天的状态 所以不需要用dp数组存
只要记得上一天两个状态的结果即可
## Code
```java=
class Solution {
    public int rob(int[] nums) {
        int rob = nums[0], norob = 0;
        for(int i=1; i<nums.length; i++){
            int rob_temp = rob;
            rob = norob+nums[i];
            norob = Math.max(rob_temp, norob);
        }
        return Math.max(rob, norob);
    }
}
```