leetCode House Robber II

来源:互联网 发布:淘宝代写毕业论文 编辑:程序博客网 时间:2024/05/18 18:03

题目链接

思路:
因为这里面不可能同时抢第一个房间和最后一个房间。所以,我们可以把问题拆成两个。回归到House Robber I
问题一 第一个到倒数第二个房间采用House Robber I算法
问题二 第二个到最后一个房间采用House Robber I算法
比较大小后返回。。

之所以能够分成这两个问题的原因是
第一个和最后一个房间可以分成如下四种情况
1第一个和这后一个都抢 这不符合题意。问题一,二都不可能得着最优解是同时抢第一个和最后一个的出来的。
2只抢第一个
如果抢第一个,那么一定不能抢最后一个。
在问题一中,如果真的抢第一个可以带来最优解那么问题一会找出来。
3只抢最后一个
如果抢最后一个,那么一定不会抢第一个。
在问题二中,如果真的抢最后一个可以带来最优解那么问题二会找出来。
4两个都不抢 包括在两个子问题中。因为这两个子问题的最优解都可能没抢第一个和最后一个

public class Solution {   public int rob(int[] nums) {        if(nums.length==0)        {            return 0;        }        if(nums.length==1)        {            return nums[0];        }        int resultA=robHelp(nums, 0, nums.length-2);        int resultB=robHelp(nums, 1, nums.length-1);        return Math.max(resultA, resultB);    }    public int robHelp(int[] nums,int start,int end)    {        int unRob=0;        int doRob=0;        for(int i=start;i<=end;i++)        {            int temp=unRob;            unRob=Math.max(temp,doRob);            doRob=temp+nums[i];        }        return Math.max(unRob, doRob);    }}
0 0
原创粉丝点击