打家劫舍 题目大致思路代码实现 题目 大致思路 递归思路:从第一个开始偷,第n个房子处偷得的最大的总钱数要么是第n-1个房子处偷得的总钱数,要么是第n-2个房子处偷的总钱数+当前房子存放的钱数。 代码实现 class Solution { //创建结果存放数组 public static int[] result; public int recur(int[] nums, int index) { if (index < 0) { return 0; } if (result[index] >= 0) { return result[index]; } //第index个房子处偷得的最大的总钱数要么是上一个房子处取得的最大的总钱数,要么是上上一个房子取得的总钱数加上当前房子存放的钱。 result[index] = Math.max(recur(nums, index - 1), recur(nums, index - 2) + nums[index]); return result[index]; } public int rob(int[] nums) { //创建数组 result = new int[nums.length]; //将数组的初始值赋值为-1,使其达到进入递归的条件 for (int i = 0; i < nums.length; i++) { result[i] = -1; } return recur(nums, nums.length - 1); } }