leetcode - 213. 打家劫舍 II

leetcode - 213. 打家劫舍 II_第1张图片
解题思路:这道题是“打家劫舍I”的升级版,和“打家劫舍I”的区别在于“打家劫舍II”的第一个房子和最后一个房子是相连的,这就导致不能用“打家劫舍I”的方法来解题。为了解决“打家劫舍II”中的相连问题,这里讨论两种情况,第一种情况是仅考虑第1个房子到n-1个房子能够窃取的最大的金额,第二种情况是讨论第2个房子到第n个房子能够窃取的最大的金额,然后比较两者之间的取值,返回较大的取值。其状态转移方程和“打家劫舍I”是一样的,区别在于这里讨论的是两种情况。其C++代码如下:

class Solution {
public:
    int rob(vector& nums) {
        int length = nums.size();
        if(length==0)
            return 0;
        if(length==1)
            return nums[0];
        vector dp_1(length,0);
        vector dp_n(length,0);
        dp_1[1] = nums[0];
        dp_n[1] = nums[1];
        int num_1 = dp_1[1];
        int num_n = dp_n[1];
        for(int i=1;i

你可能感兴趣的:(LeetCode算法题)