当前位置:   article > 正文

代码随想录算法训练营第四十七天|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

代码随想录算法训练营第四十七天|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

198.打家劫舍

  1. // 动态规划
  2. class Solution {
  3. public int rob(int[] nums) {
  4. if (nums == null || nums.length == 0) return 0;
  5. if (nums.length == 1) return nums[0];
  6. int[] dp = new int[nums.length];
  7. dp[0] = nums[0];
  8. dp[1] = Math.max(dp[0], nums[1]);
  9. for (int i = 2; i < nums.length; i++) {
  10. dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]);
  11. }
  12. return dp[nums.length - 1];
  13. }
  14. }

213.打家劫舍II

  1. class Solution {
  2. public int rob(int[] nums) {
  3. if (nums == null || nums.length == 0)
  4. return 0;
  5. int len = nums.length;
  6. if (len == 1)
  7. return nums[0];
  8. return Math.max(robAction(nums, 0, len - 1), robAction(nums, 1, len));
  9. }
  10. int robAction(int[] nums, int start, int end) {
  11. int x = 0, y = 0, z = 0;
  12. for (int i = start; i < end; i++) {
  13. y = z;
  14. z = Math.max(y, x + nums[i]);
  15. x = y;
  16. }
  17. return z;
  18. }
  19. }

337.打家劫舍III

  1. class Solution {
  2. public int rob(TreeNode root) {
  3. if (root == null)
  4. return 0;
  5. int money = root.val;
  6. if (root.left != null) {
  7. money += rob(root.left.left) + rob(root.left.right);
  8. }
  9. if (root.right != null) {
  10. money += rob(root.right.left) + rob(root.right.right);
  11. }
  12. return Math.max(money, rob(root.left) + rob(root.right));
  13. }
  14. }

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号