相比于上一问,这道题加了一个限制条件是房子是一个环,即nums[0]和nums[n-1]是相邻的,两个房间不能同时抢劫。 那么实际上这个环可以分解为0到length-2以及1到length-1这两个区间,区间内的求解和上一问一致,求最大值即可。(即选不选择nums[0]的两种可能性比较一下,其他的思想和上一问一致)
public class Solution {
public int rob(int[] nums) {
if( nums.length == 0 )
{
return 0;
}
if( nums.length== 1 )
{
return nums[0];
}
return Math.max( fun(nums,0,nums.length-2),fun(nums,1,nums.length-1) );
}
int fun(int[] nums,int st,int ed)
{
// int[] rt = new int[nums.length];
if( st==ed )
{
return nums[st];
}
int d1=nums[st],d2=Math.max(nums[st],nums[st+1]);
for( int i=st+2;i<=ed;i++ )
{
int temp = d2;
d2 = Math.max( d2,d1+nums[i] );
d1 = temp;
}
return d2;
}
}