0337-打家劫舍III

技术0337-打家劫舍III 0337-打家劫舍III在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一

0337-打家劫舍罗马数字3

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

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

示例1:

输入: [3,2,3,null,3,null,1]

输出: 7

解释:小偷一晚能够盗取的最高金额=3 3 1=7.

示例2:

输入: [3,4,5,1,3,null,1]

输出: 9

解释:小偷一晚能够盗取的最高金额=4 5=9.

来源:力扣(LeetCode)

链接:https://leet代码-cn。com/problems/house-barber-iii

参考:

https://leet代码-cn。com/problems/house-barber-iii/solution/Dai-ma-sui-Xiang-Lu-337-da-Jia-Jie-she-I-j60v/

python

# 0337.打家劫舍罗马数字3

类别解决方案:

内存={}

def rob(self,root: TreeNode) - int:

'''

暴力递归,O(2^n)

:参数根:

:return:

'''

如果根为非:则返回0

如果左根为无根,对为无:

返回root.val

# 偷父节点

val_1=root.val

if root.left:

val_1=self.rob(根。左。左self.rob(根。左。右)

if root.right:

val_1=self.rob(根。右。左self.rob(根。右。右)

# 不偷父节点

val_2=self.rob(根。左self.rob(根。右)

返回最大值(val_1,val_2)

def rob1(self,root: TreeNode) - int:

'''

记忆化递归

:参数根:

:return:

'''

如果不是root:则返回0

如果不是根。左也不是根。右:

返回root.val

如果自我记忆获得(根)不是无:

返回自我记忆[根]

# 偷父节点

val_1=root.val

if root.left:

val_1=self.rob1(根。左。左)self.rob1(根。左。右)

if root.right:

val_1=self.rob1(根。右。左)self.rob1(根。右。右)

# 不偷父节点

val_2=self.rob1(根。左)self.rob1(根。右)

self.memory[root]=max(val_1,val_2)

返回最大值(val_1,val_2)

def rob(self,root: TreeNode) - int:

'''

动态规划-时间O(n)

:参数根:

:return:

'''

def rob_tree(根):

如果不是root:

return (0,0) #(偷当前节点金额,不偷当前节点金额)

left=rob_tree(root.left)

右=rob_tree(root.right)

val_1=root.val左[1]右[1] #偷当前节点

val_2=最大值(左[0],左[1])最大值(右[0],右[1]) #不偷当前节点,考虑子节点

返回(val_1,val_2)

结果=rob_tree(根)

返回最大值(结果[0],结果[1])

golang

包动态编程

导入" leetcode200/binaryTree "

//动态规划-打家劫舍罗马数字3

func rob3(根*binaryTree .TreeNode) int(

var后序函数(节点* Binarytree .TreeNode) []int

postorder=func(node *binaryTree .TreeNode) []int {

如果节点==零

return []int{0,0}

}

左:=后置(节点。左)

右:=后置(节点。右)

val_1 :=节点瓦尔.左[1]右[1]

val_2 :=最大值(左[0],左[1])最大值(右[0],右[1])

return []int{val_1,val_2}

}

结果:=后置(根)

返回最大值(结果[0],结果[1])

}

func max(a,b int) int {

如果a b

返回a

}

返回b

}

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/132077.html

(0)

相关推荐

  • PHP中跳转与重定向的区别有哪些

    技术PHP中跳转与重定向的区别有哪些这篇文章主要讲解了“PHP中跳转与重定向的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP中跳转与重定向的区别有哪些”吧

    攻略 2021年11月4日
  • 氯化钙是沉淀吗,氯化钙静止时间长会不会产生沉淀

    技术氯化钙是沉淀吗,氯化钙静止时间长会不会产生沉淀不会与氯化钙的密度一类的有关了,温度啊,通风情况啊,都有一定的关系,与CO2加入石溶液是一样的道理氯化钙是沉淀吗。 CO2与SO2加入水中会生成碳酸和亚硫酸,酸与盐反应生

    生活 2021年10月20日
  • java中的公平锁和非公平锁(java哪些是公平锁和非公平锁)

    技术Java AQS中的公平锁与非公平锁怎么使用本篇内容主要讲解“Java AQS中的公平锁与非公平锁怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java AQS中

    攻略 2021年12月21日
  • 分析型数据仓库中如何实现读写分离

    技术分析型数据仓库中如何实现读写分离这篇文章主要为大家展示了“分析型数据仓库中如何实现读写分离”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“分析型数据仓库中如何实现读写分离”

    攻略 2021年11月23日
  • C++使用标准概念有什么优点

    技术C++使用标准概念有什么优点本篇内容主要讲解“C++使用标准概念有什么优点”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++使用标准概念有什么优点”吧!T.11:只要可

    攻略 2021年11月24日
  • 离职怎么写,工作不干了辞职报告怎么写

    技术离职怎么写,工作不干了辞职报告怎么写尊敬的领导离职怎么写:  我很遗憾自己在这个时候向公司正式提出辞职申请。  来到公司也已经快两年了,在这近两年里,得到了公司各位同事的多方帮助,我非常感谢公司各位同事。正是在这里我

    生活 2021年10月31日