博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode题目:House Robber III
阅读量:6435 次
发布时间:2019-06-23

本文共 1878 字,大约阅读时间需要 6 分钟。

题目:

The thief has found himself a new place for his thievery again. There is only one entrance to this area, called the "root." Besides the root, each house has one and only one parent house. After a tour, the smart thief realized that "all houses in this place forms a binary tree". It will automatically contact the police if two directly-linked houses were broken into on the same night.

Determine the maximum amount of money the thief can rob tonight without alerting the police.

Example 1:

3    / \   2   3    \   \      3   1

Maximum amount of money the thief can rob = 3 + 3 + 1 = 7.

 

Example 2:

3    / \   4   5  / \   \  1   3   1

Maximum amount of money the thief can rob = 4 + 5 = 9.

题目解答:

这个题目是在之前House Robber 和House Robber II之上的变体。它要求的是在树上的动归。需要用到深度优先搜索和动归的思想。一样的,相邻节点不能偷。

另外借助一个辅助结构,来帮助我们存动归中需要比较的两个值。

代码:

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ struct robMoney  //辅助数据结构,用来记录动态规划过程中的两个整型值{   int noRob;   //不偷当前这一家,可以得到的金钱数目   int curRob;  //在当前这个位置,可以获得到的金钱数目最大值   robMoney():noRob(0),curRob(0){}};class Solution {public:    int rob(TreeNode* root) {        if(root == NULL)            return 0;        robMoney res = dfs(root);        return res.curRob;//在当前位置所能获得的金钱数目最大值    }        robMoney dfs(TreeNode *root)  //深度优先搜索    {        robMoney money;        if(root == NULL)        {            return money;        }        robMoney left = dfs(root -> left);        robMoney right = dfs(root -> right);        money.noRob = left.curRob + right.curRob; //当前这家选择不偷        money.curRob = max(money.noRob, left.noRob + right.noRob + root -> val); //取二者的最大值        return money;    }            int max(int a, int b)    {        return a > b ? a : b;    }};

  

转载于:https://www.cnblogs.com/CodingGirl121/p/5548992.html

你可能感兴趣的文章
对象不支持“startsWith”属性或方法
查看>>
java提高篇(六)-----关键字static
查看>>
Activiti(四)创建一个最简单的activiti项目
查看>>
HttpWatch v10.x发布,支持在Firefox 35-35版中使用HTTP/2丨附下载
查看>>
Easy Keygen练习
查看>>
微服务随笔
查看>>
限流 RateLimiter
查看>>
idea控制台进行彩色打印
查看>>
php基础系列之字符串——变量解析
查看>>
Mycat【数据库方式】实现全局序列号
查看>>
网信办征求意见:APP这些行为属违法违规收集个人信息
查看>>
神经科学新突破!新算法助力超算进行人类大脑模拟
查看>>
kali安装软件遇到的问题&解决
查看>>
oracle的增量检查点与block buffer
查看>>
python 中关于logging 日志的输出设定
查看>>
Flutter 构建完整应用手册-持久化
查看>>
Linux安装软件目录选择
查看>>
php模式设计之 工厂模式
查看>>
Smart-git的安装使用
查看>>
HTTP强制浏览器下载文件
查看>>