198. 打家劫舍

 1 class Solution 
 2 {
 3 public:
 4     int rob(vector<int>& nums) 
 5     {
 6         if(nums.size() == 0) return 0;
 7         if(nums.size() == 1) return nums[0];
 8         if(nums.size() == 2) return max(nums[0],nums[1]);
 9         
10         int n = nums.size();
11         vector<int> dp(n,0);
12         dp[0] = nums[0];
13         dp[1] = max(nums[0],nums[1]);
14         for(int i = 2;i < n;i ++)
15         {
16             dp[i] = max(nums[i] + dp[i - 2],dp[i - 1]);
17         }
18         return dp[n - 1];
19     }
20 };

 

 1 class Solution 
 2 {
 3     vector<int> memo;
 4 public:
 5     int rob(vector<int>& nums) 
 6     {
 7         int n = nums.size();
 8         memo = vector<int>(n,-1);
 9         return slove(nums,0);
10     }
11 
12     int slove(vector<int> &nums,int i)
13     {
14         if(i >= nums.size()) return 0;
15         if(memo[i] != -1) return memo[i];
16 
17         int res = max(nums[i] + slove(nums,i + 2),slove(nums,i + 1));
18         memo[i] = res;
19 
20         return res;
21     }
22 };

 

posted @ 2020-04-16 10:14  Jinxiaobo0509  阅读(103)  评论(0)    收藏  举报