leetcode: House Robber III | Java最短代码实现

原题链接: 337. House Robber III

【思路】

House Robber 十分类似,是Dynamic Programming问题。这里使用递归来实现,数组rob来存储。rob[0]存储的是从叶子节点到当前root节点抢劫的最大值,rob[1]存储的是从叶子节点到root的孩子层节点抢劫到的最大值:

    public int rob(TreeNode root) {
        return dfs(root)[0];
    }
    private int[] dfs(TreeNode root) {
        int rob[]={0, 0};
        if (root != null) {
            int[] robLeft = dfs(root.left);
            int[] robRight = dfs(root.right);
            rob[1] = robLeft[0] + robRight[0];
            rob[0] = Math.max(rob[1], robLeft[1] + robRight[1] + root.val);
        }
        return rob;
    }
欢迎优化!

你可能感兴趣的:(java,LeetCode,dynamic,programming)