• leetcodedp337


    
    /**
     * <p>小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为<meta charset="UTF-8" />&nbsp;<code>root</code>&nbsp;。</p>
     *
     * <p>除了<meta charset="UTF-8" />&nbsp;<code>root</code>&nbsp;之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 <strong>两个直接相连的房子在同一天晚上被打劫</strong> ,房屋将自动报警。</p>
     *
     * <p>给定二叉树的&nbsp;<code>root</code>&nbsp;。返回&nbsp;<em><strong>在不触动警报的情况下</strong>&nbsp;,小偷能够盗取的最高金额</em>&nbsp;。</p>
     *
     * <p>&nbsp;</p>
     *
     * <p><strong>示例 1:</strong></p>
     *
     * <p><img alt="" src="https://assets.leetcode.com/uploads/2021/03/10/rob1-tree.jpg" /></p>
     *
     * <pre>
     * <strong>输入: </strong>root = [3,2,3,null,3,null,1]
     * <strong>输出:</strong> 7
     * <strong>解释:</strong>&nbsp;小偷一晚能够盗取的最高金额 3 + 3 + 1 = 7</pre>
     *
     * <p><strong>示例 2:</strong></p>
     *
     * <p><img alt="" src="https://assets.leetcode.com/uploads/2021/03/10/rob2-tree.jpg" /></p>
     *
     * <pre>
     * <strong>输入: </strong>root = [3,4,5,1,3,null,1]
     * <strong>输出:</strong> 9
     * <strong>解释:</strong>&nbsp;小偷一晚能够盗取的最高金额 4 + 5 = 9
     * </pre>
     *
     * <p>&nbsp;</p>
     *
     * <p><strong>提示:</strong></p>
     *
     * <p><meta charset="UTF-8" /></p>
     *
     * <ul>
     * <li>树的节点数在&nbsp;<code>[1, 10<sup>4</sup>]</code> 范围内</li>
     * <li><code>0 &lt;= Node.val &lt;= 10<sup>4</sup></code></li>
     * </ul>
     * <div><div>Related Topics</div><div><li>树</li><li>深度优先搜索</li><li>动态规划</li><li>二叉树</li></div></div><br><div><li> 1369</li><li> 0</li></div>
     */
    
    //leetcode submit region begin(Prohibit modification and deletion)
    
    import java.util.HashMap;
    
    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode() {}
     *     TreeNode(int val) { this.val = val; }
     *     TreeNode(int val, TreeNode left, TreeNode right) {
     *         this.val = val;
     *         this.left = left;
     *         this.right = right;
     *     }
     * }
     */
    class Solution {
            Map<TreeNode, Integer> memo = new HashMap<>();
        //二叉树遍历 每个节点抢活着不抢
        public int rob(TreeNode root) {
            if (root == null) return 0;
            // 利用备忘录消除重叠子问题
            if (memo.containsKey(root))
                return memo.get(root);
            // 抢,然后去下下家
            int do_it = root.val
                    + (root.left == null ?
                    0 : rob(root.left.left) + rob(root.left.right))
                    + (root.right == null ?
                    0 : rob(root.right.left) + rob(root.right.right));
            // 不抢,然后去下家
            int not_do = rob(root.left) + rob(root.right);
    
            int res = Math.max(do_it, not_do);
            memo.put(root, res);
            return res;
        }
    }
    //leetcode submit region end(Prohibit modification and deletion)
    
    
  • 相关阅读:
    mysql工具导出数据库表数据
    c#接收http的post请求的多个文件流
    java上传文件和参数到服务器
    windows server 2008 w3svc服务无法启动
    java调用c#webapi的接口实现文件上传
    postman上线文件上传,并用c#服务端接收
    sql语句修改数据库字段的长度
    VB2015运行项目时出现的错误
    JavaWeb实现分页功能
    会话跟踪技术
  • 原文地址:https://www.cnblogs.com/xiaoshahai/p/16501095.html
Copyright © 2020-2023  润新知