> 文章列表 > Python每日一练(20230415)

Python每日一练(20230415)

Python每日一练(20230415)

目录

1. 路径总和 II  🌟🌟

2. 两数相除  🌟🌟

3. 不同的二叉搜索树 II  🌟🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


1. 路径总和 II

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。

叶子节点 是指没有子节点的节点。

示例 1:

输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:[[5,4,11,2],[5,8,4,5]]

示例 2:

输入:root = [1,2,3], targetSum = 5
输出:[]

示例 3:

输入:root = [1,2], targetSum = 0
输出:[]

提示:

  • 树中节点总数在范围 [0, 5000] 内
  • -1000 <= Node.val <= 1000
  • -1000 <= targetSum <= 1000

出处:

https://edu.csdn.net/practice/25658336

代码:

from typing import Listclass TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = Noneclass Solution:def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]:pathvalue = 0path = []result = []def preorder(node, pathvalue, sum, path, result):if node == None:returnpathvalue += node.valpath.append(node.val)if pathvalue == sum and node.left == None and node.right == None:result.append(list(path))  # 注意加listpreorder(node.left, pathvalue, sum, path, result)preorder(node.right, pathvalue, sum, path, result)pathvalue -= node.valpath.pop()preorder(root, pathvalue, sum, path, result)return resultdef listToTree(lst: List[int]) -> TreeNode:if not lst:return Noneroot = TreeNode(lst[0])queue = [root]i = 1while i < len(lst):node = queue.pop(0)if lst[i] is not None:node.left = TreeNode(lst[i])queue.append(node.left)i += 1if i < len(lst) and lst[i] is not None:node.right = TreeNode(lst[i])queue.append(node.right)i += 1return root#%%
s = Solution()
null = None
nums = [5,4,8,11,null,13,4,7,2,null,null,5,1]
root = listToTree(nums)
targetSum = 22
print(s.pathSum(root, targetSum))

输出:

[[5, 4, 11, 2], [5, 8, 4, 5]]


2. 两数相除

给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。

返回被除数 dividend 除以除数 divisor 得到的商。

整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2

示例 1:

输入: dividend = 10, divisor = 3
输出: 3
解释: 10/3 = truncate(3.33333..) = truncate(3) = 3

示例 2:

输入: dividend = 7, divisor = -3
输出: -2
解释: 7/-3 = truncate(-2.33333..) = -2

提示:

  • 被除数和除数均为 32 位有符号整数。
  • 除数不为 0。
  • 假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−2^31,  2^31 − 1]。本题中,如果除法结果溢出,则返回 231 − 1。

出处:

https://edu.csdn.net/practice/25658337

代码:

import math
class Solution(object):def divide(self, dividend, divisor):if divisor == 0:return math.inf #MAX_INTif dividend == 0:return 0isPositive = (dividend < 0) == (divisor < 0)m = abs(dividend)n = abs(divisor)res = math.log(m) - math.log(n)res = int(math.exp(res))if isPositive:return min(res, 2147483647)return max(0 - res, -2147483648)if __name__ == '__main__':s = Solution()print(s.divide(10, 3))print(s.divide(7, -3))print(s.divide(1, 0))

输出:

3
-2
inf


3. 不同的二叉搜索树 II

给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。

示例 1:

输入:n = 3
输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]

示例 2:

输入:n = 1
输出:[[1]]

提示:

  • 1 <= n <= 8

出处:

https://edu.csdn.net/practice/25658338

代码:

class TreeNode(object):def __init__(self, x):self.val = xself.left = Noneself.right = Nonedef to_list(self, count):queue = []queue.append(self)result = []while len(queue) > 0:if count == 0:breaknode = queue.pop(0)if node is None:result.append('null')else:count -= 1result.append(node.val)queue.append(node.left)queue.append(node.right)return result
class Solution(object):def generateTrees(self, n):""":type n: int:rtype: List[TreeNode]"""if n == 0:return []return self.get_trees(1, n)def get_trees_impl(self, start, end):trees = []if start > end:trees.append(None)return treesfor i in range(start, end + 1):lefts = self.get_trees_impl(start, i - 1)rights = self.get_trees_impl(i + 1, end)for j in range(len(lefts)):for k in range(len(rights)):root = TreeNode(i)root.left = lefts[j]root.right = rights[k]trees.append(root)return treesdef get_trees(self, start, end):trees = self.get_trees_impl(start, end)results = []for tree in trees:if tree is None:results.append([])else:results.append(tree.to_list(end))return results
# %%
s = Solution()
print(s.generateTrees(n=3))

输出:

[[1, 'null', 2, 'null', 3], [1, 'null', 3, 2], [2, 1, 3], [3, 1, 'null', 'null', 2], [3, 2, 'null', 1]]


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏