package org.example; class Solution { public int rob(int[] nums) { // dp 数组 // dp[i] 的含义偷窃至 i 1 号房屋时偷窃到的最高金额 int[] dp new int[nums.length]; if (nums.length 1) { // 只有一个房屋一定偷该房屋 return nums[0]; } else if (nums.length 2) { // 只有两个房屋偷钱多的那个 return Math.max(nums[0], nums[1]); } // 初始化 dp 数组 // dp[0]偷 1 号房屋 dp[0] nums[0]; // dp[1]偷 1 号房屋和 2 号房屋中钱多的那个 dp[1] Math.max(nums[0], nums[1]); // 填充 dp 数组 for (int i 2; i nums.length; i) { // 递推公式dp[i] max(dp[i - 1] , dp[i - 2] nums[i]) dp[i] Math.max(dp[i - 1], // 不偷当前的房屋 dp[i - 2] nums[i] // 偷当前的房屋 ); } return dp[nums.length - 1]; } }