主要分析第 i 间房偷还是不偷的关系。

    1. class Solution {
    2. public int rob(int[] nums) {
    3. if (nums == null || nums.length == 0) return 0;
    4. // dp[i] 表示偷
    5. // [1,2,3,1]
    6. // [1,2,4,4]
    7. // [1,2,4,4]
    8. // 第 i 家是偷和不偷的关系
    9. // 如果偷的话,那么第 i - 1 家是不能偷的
    10. // dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1])
    11. int len = nums.length;
    12. int[] dp = new int[len + 1];
    13. dp[1] = nums[0];
    14. for (int i = 2; i <= len; i++) {
    15. dp[i] = Math.max(dp[i - 2] + nums[i - 1], dp[i - 1]);
    16. }
    17. return dp[len];
    18. }
    19. private void printArr(int[] arr) {
    20. for (int i : arr) {
    21. System.out.print(i + " ");
    22. }
    23. }
    24. }