Python每日一练(20230218)

简介: Python每日一练(20230218)

1. 旋转图像


给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。


示例 1:

9a815a9eeb64d633de1bcd8d864f069d.jpeg



输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]

输出:[[7,4,1],[8,5,2],[9,6,3]]

示例 2:

5f637f84287da51eb330d2128bfb306f.jpeg



输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]

输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]


示例 3:

输入:matrix = [[1]]

输出:[[1]]


示例 4:

输入:matrix = [[1,2],[3,4]]

输出:[[3,1],[4,2]]


提示:


   matrix.length == n

   matrix[i].length == n

   1 <= n <= 20

   -1000 <= matrix[i][j] <= 1000


源代码:  

class Solution(object):
    def rotate(self, matrix):
        if matrix is None or len(matrix) == 1:
            return matrix
        ls = len(matrix)
        for i in range(int(ls / 2)):
            begin, end = i, ls - 1 - i
            for k in range(ls - 2 * i - 1):
                temp = matrix[end - k][begin]
                matrix[end - k][begin] = matrix[end][end - k]
                matrix[end][end - k] = matrix[begin + k][end]
                matrix[begin + k][end] = matrix[begin][begin + k]
                matrix[begin][begin + k] = temp
        return matrix
if __name__ == "__main__":
    s = Solution()
    print(s.rotate([[1,2,3],[4,5,6],[7,8,9]]))
    print(s.rotate([[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]))
    print(s.rotate([[1]]))
    print(s.rotate([[1,2],[3,4]]))



输出:

[[7, 4, 1], [8, 5, 2], [9, 6, 3]]

[[15, 13, 2, 5], [14, 3, 4, 1], [12, 6, 8, 9], [16, 7, 10, 11]]

[[1]]

[[3, 1], [4, 2]]




2. 解码方法


一条包含字母 A-Z 的消息通过以下映射进行了 编码


'A' -> 1 'B' -> 2 ... 'Z' -> 26

要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"11106" 可以映射为:

   "AAJF" ,将消息分组为 (1 1 10 6)

   "KJF" ,将消息分组为 (11 10 6)


注意,消息不能分组为  (1 11 06) ,因为 "06" 不能映射为 "F" ,这是由于 "6" 和 "06" 在映射中并不等价。


给你一个只含数字的 非空 字符串 s ,请计算并返回 解码 方法的 总数 。

题目数据保证答案肯定是一个 32 位 的整数。


示例 1:

输入:s = "12"

输出:2

解释:它可以解码为 "AB"(1 2)或者 "L"(12)。


示例 2:

输入:s = "226"

输出:3

解释:它可以解码为 "BZ" (2 26), "VF" (22 6), 或者 "BBF" (2 2 6) 。


示例 3:

输入:s = "0"

输出:0

解释:没有字符映射到以 0 开头的数字。含有 0 的有效映射是 'J' -> "10" 和 'T'-> "20" 。由于没有字符,因此没有有效的方法对此进行解码,因为所有数字都需要映射。


示例 4:

输入:s = "06"

输出:0

解释:"06" 不能映射到 "F" ,因为字符串含有前导 0("6" 和 "06" 在映射中并不等价)。


提示:


   1 <= s.length <= 100

   s 只包含数字,并且可能包含前导零。


源代码:  


class Solution(object):
    def numDecodings(self, s:str) -> int:
        ls = len(s)
        if ls == 0:
            return 0
        dp = [0] * ls
        for index in range(ls):
            if index >= 1 and int(s[index - 1:index + 1]) < 27 and int(s[index - 1:index + 1]) >= 10:
                if index == 1:
                    dp[index] = 1
                else:
                    dp[index] += dp[index - 2]
            if int(s[index]) != 0:
                if index == 0:
                    dp[index] = 1
                else:
                    dp[index] += dp[index - 1]
        return dp[ls - 1]
s = Solution()
print(s.numDecodings(s = "12"))
print(s.numDecodings(s = "226"))
print(s.numDecodings(s = "0"))
print(s.numDecodings(s = "06"))


输出:

2

3

0

0



3. 二叉树最大路径和


路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。


路径和 是路径中各节点值的总和。

给你一个二叉树的根节点 root ,返回其 最大路径和

示例 1:

ca0d0d9f728f2aeda1976de9b08940e5.jpeg


输入:root = [1,2,3]

输出:6

解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6


示例 2:

730fd58fb57c0fbc6d5f77b18e9d6b50.jpeg



输入:root = [-10,9,20,null,null,15,7]

输出:42

解释:最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42


提示:

   树中节点数目范围是 [1, 3 * 104]

   -1000 <= Node.val <= 1000

源代码:  


class TreeNode:
    def __init__(self, val=None):
        self.val = val
        self.left = None
        self.right = None
def Build(root, nodesList, i=0):
    if i < len(nodesList):
        if nodesList[i]:
            root = TreeNode(nodesList[i])
            root.left = Build(root.left, nodesList, 2*i+1)
            root.right = Build(root.right, nodesList, 2*i+2)
        return root
class Solution:
    def __init__(self):
        self.result = float("-inf")
    def maxPathSum(self, root: TreeNode) -> int:
        if root == None:
            return 0
        self.getMax(root)
        return self.result
    def getMax(self, root):
        if root == None:
            return 0
        left = max(0, self.getMax(root.left))
        right = max(0, self.getMax(root.right))
        self.result = max(self.result, left + right + root.val)
        return max(left, right) + root.val
s = Solution()
tree = TreeNode()
root = Build(tree, [1,2,3])
print(s.maxPathSum(root))
root = Build(tree, [-10,9,20,None,None,15,7]) #null在python语言中表示为None
print(s.maxPathSum(root))



输出:

6

42

目录
相关文章
|
8月前
|
Python 人工智能
讯飞星火、文心一言和通义千问同时编“贪吃蛇”游戏,谁会胜出?
讯飞星火、文心一言和通义千问同时编“贪吃蛇”游戏,谁会胜出?
127 1
讯飞星火、文心一言和通义千问同时编“贪吃蛇”游戏,谁会胜出?
|
8月前
|
Shell Unix Linux
Linux 终端命令之文件浏览(3) less
Linux 终端命令之文件浏览(3) less
89 0
Linux 终端命令之文件浏览(3) less
|
8月前
|
Rust
Rust 编程小技巧摘选(8)
Rust 编程小技巧摘选(8)
225 0
Rust 编程小技巧摘选(8)
|
8月前
|
算法 C++ 机器人
力扣 C++|一题多解之动态规划专题(1)
力扣 C++|一题多解之动态规划专题(1)
68 0
力扣 C++|一题多解之动态规划专题(1)
|
8月前
|
C++ Python 索引
Python Numpy入门基础(二)数组操作
Python Numpy入门基础(二)数组操作
66 0
Python Numpy入门基础(二)数组操作
|
8月前
|
C++ 存储
力扣C++|一题多解之数学题专场(1)
力扣C++|一题多解之数学题专场(1)
59 0
力扣C++|一题多解之数学题专场(1)
|
8月前
|
Java Go C++
Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分
Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分
64 0
Golang每日一练(leetDay0118) 扁平化嵌套列表迭代器、整数拆分
|
8月前
|
Java Go C++
Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组
Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组
75 0
Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组
|
8月前
|
Java Go C++
Golang每日一练(leetDay0110) 零钱兑换I\II Coin Change
Golang每日一练(leetDay0110) 零钱兑换I\II Coin Change
99 0
Golang每日一练(leetDay0110) 零钱兑换I\II Coin Change
|
8月前
|
Java Go Rust
Rust每日一练(Leetday0030) 合并有序数组、格雷编码、子集II
Rust每日一练(Leetday0030) 合并有序数组、格雷编码、子集II
103 0
Rust每日一练(Leetday0030) 合并有序数组、格雷编码、子集II

热门文章

最新文章