Python每日一练(20230323)

简介: Python每日一练(20230323)

1. 电话号码的字母组合


给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

71e2c27cd43a6f678c1972f865e982d0.png



示例 1:

输入:digits = "23"

输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]


示例 2:

输入:digits = ""

输出:[]


示例 3:

输入:digits = "2"

输出:["a","b","c"]


提示:

   0 <= digits.length <= 4

   digits[i] 是范围 ['2', '9'] 的一个数字。


出处:

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

代码:

from typing import List
class Solution:
    def letterCombinations(self, digits: str) -> List[str]:
        letters = [
            [],
            [],
            ['a', 'b', 'c'],
            ['d', 'e', 'f'],
            ['g', 'h', 'i'],
            ['j', 'k', 'l'],
            ['m', 'n', 'o'],
            ['p', 'q', 'r', 's'],
            ['t', 'u', 'v'],
            ['w', 'x', 'y', 'z'],
        ]
        combinations = []
        i = 0
        for d in digits:
            letter = letters[int(d)]
            if i == 0:
                for l in letter:
                    combinations.append([l])
            else:
                added = []
                for c in combinations:
                    j = 0
                    origin_c = []
                    origin_c += c
                    for l in letter:
                        if j == 0:
                            c.append(l)
                        else:
                            new_c = []
                            new_c += origin_c
                            new_c.append(l)
                            added.append(new_c)
                        j += 1
                combinations += added
            i += 1
        output = []
        for c in combinations:
            output.append(''.join(c))
        return output
# %%
s = Solution()
print(s.letterCombinations(digits = "23"))
print(s.letterCombinations(digits = ""))
print(s.letterCombinations(digits = "2"))


输出:

['ad', 'bd', 'cd', 'ae', 'af', 'be', 'bf', 'ce', 'cf']

[]

['a', 'b', 'c']


2. 矩形区域不超过 K 的最大数值和


给你一个 m x n 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。

题目数据保证总会存在一个数值和不超过 k 的矩形区域。

示例 1:

36c6ba4d37c75b0d1bc5cdf1a7801601.jpeg



输入:matrix = [[1,0,1],[0,-2,3]], k = 2

输出:2

解释:蓝色边框圈出来的矩形区域 [[0, 1], [-2, 3]] 的数值和是 2,且 2 是不超过 k 的最大数字(k = 2)。


示例 2:

输入:matrix = [[2,2,-1]], k = 3

输出:3


提示:

   m == matrix.length

   n == matrix[i].length

   1 <= m, n <= 100

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

   -10^5 <= k <= 10^5


进阶:如果行数远大于列数,该如何设计解决方案?


出处:

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

代码:

from typing import List
import bisect
class Solution:
    def maxSumSubmatrix(self, matrix: List[List[int]], k: int) -> int:
        m = len(matrix)
        Row, Col = len(matrix), len(matrix[0])
        res = float("-inf")
        for ru in range(Row):
            col_sum = [0 for _ in range(Col)]
            for rd in range(ru, Row):
                for c in range(Col):
                    if matrix[rd][c] == k:
                        return k
                    col_sum[c] += matrix[rd][c]
                presum = [0]
                cur_sum = 0
                for colsum in col_sum:
                    cur_sum += colsum
                    idx = bisect.bisect_left(presum, cur_sum - k)
                    if idx < len(presum):
                        res = max(res, cur_sum - presum[idx])
                        if res == k:
                            return k
                    bisect.insort(presum, cur_sum)
        return res
# %%
s = Solution()
print(s.maxSumSubmatrix(matrix = [[1,0,1],[0,-2,3]], k = 2))
print(s.maxSumSubmatrix(matrix = [[2,2,-1]], k = 3))


输出:

2

3


3. 有序链表转换二叉搜索树


给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。

本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

示例:

给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:


           0

          /  \

       -3   9

       /    /

   -10  5

出处:

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

代码:


class ListNode:
    def __init__(self, val=0):
        self.val = val
        self.next = None
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
class Solution:
    def sortedListToBST(self, head: ListNode) -> TreeNode:
        arr = []
        cur = head
        while cur:
            arr.append(cur.val)
            cur = cur.next
        return self.dfs(arr)
    def dfs(self, arr):
        if not arr:
            return
        m = len(arr) // 2
        root = TreeNode(arr[m])
        root.left = self.dfs(arr[:m])
        root.right = self.dfs(arr[m + 1 :])
        return root
def list2ListNode(lst: list) -> ListNode:
    cur = res = ListNode()
    for i in lst:
        cur.next = ListNode(i)
        cur = cur.next
    return res.next
def levelOrderList(root) -> list:
    if not root:
        return []
    queue = [root]
    res = []
    while queue:
        level = []
        for _ in range(len(queue)):
            node = queue.pop(0)
            if node:
                level.append(node.val)
                queue.append(node.left)
                queue.append(node.right)
            else:
                level.append(None)
        res.extend(level)
    while res[-1]==None:
        res.pop()
    return res
if __name__ == '__main__':
    s = Solution()
    nums = [-10, -3, 0, 5, 9]
    head = list2ListNode(nums)
    root = s.sortedListToBST(head)
    print(levelOrderList(root))




输出:

[0, -3, 9, -10, None, 5]










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

推荐镜像

更多