文章目录

  • 1. 题目
    • 1.1 相关题目:
  • 2. 解题
    • 2.1 递归
    • 2.2 记忆化递归

1. 题目

在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警

计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。

示例 1:
输入: [3,2,3,null,3,null,1]3/ \2   3\   \ 3   1输出: 7
解释: 小偷一晚能够盗取的最高金额 = 3 + 3 + 1 = 7.示例 2:
输入: [3,4,5,1,3,null,1]3/ \4   5/ \   \ 1   3   1输出: 9
解释: 小偷一晚能够盗取的最高金额 = 4 + 5 = 9.

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/house-robber-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1.1 相关题目:

LeetCode 198. 打家劫舍(DP)
LeetCode 213. 打家劫舍 II(DP)

2. 解题

2.1 递归

  • 父节点偷,或者不偷,相应的子节点不偷,或者偷,取max
class Solution {public:int rob(TreeNode* root) {return max(rob(root,0),rob(root,1));}int rob(TreeNode* root, bool steal){if(root == NULL)return 0;if(steal)return root->val+rob(root->left,0)+rob(root->right,0);else//没有偷return max(rob(root->left,0),rob(root->left,1))+max(rob(root->right,0),rob(root->right,1));}
};

暴力递归,最后一个测试例子超时。

2.2 记忆化递归

  • 上面有很多重复子问题
  • 利用map存储结果(不能用哈希map,编译报错,好像是因为hash函数需要自己定义)
Line 2: Char 42:   required from here
/usr/local/include/c++/8.2.0/bits/hashtable.h:195:21: error: staticassertion failed: hash function must be invocable with an argument of key typestatic_assert(__is_invocable<const _H1&, const _Key&>{},^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class Solution {map<pair<TreeNode*,bool>,int> m;
public:int rob(TreeNode* root) {return max(rob(root,0),rob(root,1));}int rob(TreeNode* root, bool steal){if(root == NULL)return 0;if(m.find(make_pair(root,steal)) != m.end())return m[make_pair(root,steal)];if(steal){int val = root->val + rob(root->left,0) + rob(root->right,0);m[make_pair(root,steal)] = val;return val;}else//没有偷root{int val = max(rob(root->left,0),rob(root->left,1))+max(rob(root->right,0),rob(root->right,1));m[make_pair(root,steal)] = val;return val;}}
};

LeetCode 337. 打家劫舍 III(记忆化+递归)相关推荐

  1. 104. Leetcode 337. 打家劫舍 III (动态规划-打家劫舍)

    步骤一.确定递归函数的参数和返回值: dp数组及下标的含义 dp数组的长度为2, 下标为0记录不偷该节点所得到的的最大金钱,下标为1记 录偷该节点所得到的的最大金钱. 步骤二.确定终止条件: 在遍历的 ...

  2. leetcode —— 337. 打家劫舍 III

    在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区.这个地区只有一个入口,我们称之为"根". 除了"根"之外,每栋房子有且只有一个" ...

  3. 【记忆化递归+DP】LeetCode 139. Word Break

    LeetCode 139. Word Break Solution1: 记忆化递归的典型套路题 参考网址:https://zxi.mytechroad.com/blog/leetcode/leetco ...

  4. LeetCode 87. 扰乱字符串(记忆化递归 / DP)

    文章目录 1. 题目 2. 解题 2.1 记忆化递归 2.2 动态规划 1. 题目 给定一个字符串 s1,我们可以把它递归地分割成两个非空子字符串,从而将其表示为二叉树. 下图是字符串 s1 = &q ...

  5. LeetCode 514. 自由之路(记忆化递归 / DP)

    文章目录 1. 题目 2. 解题 1. 题目 电子游戏"辐射4"中,任务"通向自由"要求玩家到达名为"Freedom Trail Ring" ...

  6. LeetCode 329. 矩阵中的最长递增路径(记忆化递归)

    文章目录 1. 题目 2. 解题 2.1 记忆化递归 2.2 拓扑排序 1. 题目 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向 ...

  7. 【重点!DFS/记忆化递归 + BFS】LeetCode 133. Clone Graph

    LeetCode 133. Clone Graph Solution1: DFS/记忆化递归,参考网址:http://www.cnblogs.com/grandyang/p/4267628.html ...

  8. 【DFS + 记忆化递归】LeetCode 140. Word Break II

    LeetCode 140. Word Break II Solution1:我的答案 纯DFS,在第31个case时超时,还是记录一下.. class Solution { // DFS public ...

  9. 【DFS + 记忆化递归 + DP】LeetCode 91. Decode Ways

    LeetCode 91. Decode Ways Solution1:我的答案 还是记录一下,最容易想到的是DFS,但是在第223/238个case上就超时了... class Solution { ...

最新文章

  1. python3语音识别模块_语音识别(LSTM+CTC)
  2. golang中的strings.Join
  3. UA MATH566 统计理论2 点估计基础
  4. Spring OXM-XStream使用别名
  5. BZOJ-2242-计算器-SDOI2011-BSGS
  6. JavaWeb -- Session实例 -- 自动登录 和 防止表单重复提交(令牌产生器) MD5码
  7. 静态和动态include
  8. 使用Git上传本地项目到oschina
  9. Cesium入门-2-增加地形
  10. centos下查看最大Socket连接数
  11. OpenSSL 1.1.1 新特性: 全面支持国密SM2/SM3/SM4加密算法
  12. JavsScript 节流函数 分金定穴
  13. 苹果手微信显示无法连接服务器,iPhone手机无法运行微信的4种解决技巧
  14. matlab 三维 作图 坐标轴_matlab三维画图
  15. python量化选股策略 源码_【一点资讯】Python实现行业轮动量化选股【附完整源码】...
  16. 在Java中打印金字塔图案
  17. 此文让你至少走三年弯路
  18. JAXWS CXF JAXB + MyEclipse + Maven Byron自學視頻04
  19. 每个程序员都应该了解的 CPU 高速缓存
  20. MultiValueMap

热门文章

  1. 从离散值中把值相近的放在一起
  2. python windows窗口置顶_想用Python编程却不知如何下手?一篇搞定编程准备工作
  3. unity2d随机生成物体_2020 年最好用的一键生成设计神器,全在这里了!
  4. HDOJ 5071 Chat 模拟
  5. SQL 语句还原SQL Server数据库
  6. 智能客户端研究笔记(三)
  7. 数据库中字段类型Number(n,m)大概说明
  8. 你确定不反编译 likely 看看?
  9. 内核抢占,让世界变得更美好 | Linux 内核
  10. 基于STC89C52的韦根数据接收