力扣打家劫舍python
时间: 2023-10-01 07:04:27 浏览: 177
引中的代码是关于力扣打家劫舍问题的解决方案。这个问题是一个关于二叉树的变种,需要使用后序遍历的迭代方法来解决。代码中的函数robback实现了后序遍历,它会递归地计算每个节点的最大金额,返回两个值:不包括当前节点金额的最大金额和包括当前节点金额的最大金额。最后,函数robback会返回根节点的最大金额。在代码的最后,函数rob会调用robback函数,并返回最大金额。
参考代码如下:
```python
class Solution:
def rob(self, root: TreeNode) -> int:
def robback(node):
if not node:
return 0, 0
ladd, lnotadd = robback(node.left)
radd, rnotadd = robback(node.right)
return lnotadd + rnotadd + node.val, max(ladd, lnotadd) + max(radd, rnotadd)
add, notadd = robback(root)
return max(add, notadd)
```
相关问题
力扣加一python
力扣加一问题的Python解法有多种方法。以下是其中一种方法的完整代码:
```python
def plusOne(digits):
return [int(i) for i in str(int(''.join(str(j) for j in digits))) + 1]
```
这个方法使用了列表表达式和字符串操作,将整数列表转换为一个字符串,然后再将字符串转换为整数并加1,最后再将结果转换为一个整数列表。这个方法非常简洁,只需要一行代码就可以完成。
另一种方法是使用类的形式来实现:
```python
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
num = 0
j = 1
for i in digits[::-1]:
num += i * j
j *= 10
num += 1
result = [int(i) for i in str(num)]
return result
```
这个方法首先将整数列表表示为一个整数,然后将整数加1,再将结果转换为一个整数列表。这个方法使用了类和循环来实现。
另外还有一种特殊情况的解法,当数字列表为[9,9,9]时,需要在列表前面拼接一列表,并且将原有所有元素都置为0。以下是这种方法的完整代码:
```python
def plusOne(digits):
for i in reversed(range(len(digits))):
digits[i += 1
if digits[i < 10:
break
digits[i = 0
else:
return [1 + digits
return digits
```
这个方法使用了循环和条件语句来处理是否产生进位的情况,并根据不同的情况返回不同的结果。
以上是关于力扣加一问题的三种Python解法。每种解法都有其特点和适用场景,你可以根据具体的需求选择相应的方法。
力扣14 Python
力扣14题是一个经典的算法题目,题目名称为"最长公共前缀"。给定一个字符串数组,要求找出这些字符串的最长公共前缀。
解题思路如下:
1. 首先判断数组是否为空,如果为空则返回空字符串。
2. 初始化最长公共前缀为数组中的第一个字符串。
3. 遍历数组中的每个字符串,将其与最长公共前缀进行比较。
4. 如果当前字符串不以最长公共前缀开头,则将最长公共前缀缩短为当前字符串与最长公共前缀的公共部分。
5. 继续遍历数组中的其他字符串,重复步骤4,直到遍历完所有字符串或者最长公共前缀为空字符串。
6. 返回最长公共前缀作为结果。
以下是Python的实现代码:
```python
def longestCommonPrefix(strs):
if not strs:
return ""
prefix = strs[0]
for i in range(1, len(strs)):
while strs[i].find(prefix) != 0:
prefix = prefix[:-1]
if not prefix:
return ""
return prefix
```
阅读全文