Python每日一练(20230306)

简介: Python每日一练(20230306)

1. 翻转二叉树


翻转一棵二叉树。


示例 1:


输入:


       4

      /   \

     2     7

    / \   / \

   1   3 6   9

输出:

        4

      /   \

     7     2

    / \   / \

   9   6 3   1

示例 2:

输入:

             1

           /   \

          2     3

         /     / \

        4     5   6

                   \

                    7

输出:

             1

           /   \

          3     2

         / \     \

        6   5     4

       /

      7



代码:

class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None
class Solution(object):
    def invertTree(self, root):
        """
        :type root: TreeNode
        :rtype: TreeNode
        """
        if not root:
            return None
        root.left, root.right = root.right, root.left
        self.invertTree(root.left)
        self.invertTree(root.right)
        return root
def listToTree(lst: list) -> TreeNode:
    if not lst:
        return None
    root = TreeNode(lst[0])
    queue = [root]
    i = 1
    while i < len(lst):
        node = queue.pop(0)
        if lst[i] is not None:
            node.left = TreeNode(lst[i])
            queue.append(node.left)
        i += 1
        if i < len(lst) and lst[i] is not None:
            node.right = TreeNode(lst[i])
            queue.append(node.right)
        i += 1
    return root
def inorderTraversal(root: TreeNode) -> list:
    if not root:
        return []
    res = []
    res += inorderTraversal(root.left)
    res.append(root.val)
    res += inorderTraversal(root.right)
    return res
# %%
s = Solution()
lst = [4, 2, 7, 1, 3, 6, 9]
root = listToTree(lst)
print(inorderTraversal(root))
root = s.invertTree(root)
print(inorderTraversal(root))
lst = [1, 2, 3, 4, None, 5, 6, None, None, None, None, None, 7]
root = listToTree(lst)
print(inorderTraversal(root))
root = s.invertTree(root)
print(inorderTraversal(root))


输出:

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

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

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

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


翻转二叉树的非递归实现

def invertTree(root: TreeNode) -> TreeNode:
    if not root:
        return None
    stack = [root]
    while stack:
        node = stack.pop()
        if node:
            node.left, node.right = node.right, node.left
            stack.append(node.left)
            stack.append(node.right)
    return root



2. 最长公共前缀


编写一个函数来查找字符串数组中的最长公共前缀。


如果不存在公共前缀,返回空字符串 ""


示例 1:

输入:strs = ["flower","flow","flight"]

输出:"fl"

示例 2:

输入:strs = ["dog","racecar","car"]

输出:""

解释:输入不存在公共前缀。

提示:

   0 <= strs.length <= 200

   0 <= strs[i].length <= 200

   strs[i] 仅由小写英文字母组成

代码:


from typing import List
class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if len(strs) == 0:
            return ''
        i = 0
        lcp = []
        while True:
            done = False
            if i >= len(strs[0]):
                break
            j = 0
            while j < len(strs):
                if i < len(strs[j]):
                    if strs[j][i] != strs[0][i]:
                        done = True
                        break
                else:
                    done = True
                    break
                j += 1
            if not done:
                lcp.append(strs[0][i])
                i += 1
            else:
                break
        return ''.join(lcp)
# %%
s = Solution()
print(s.longestCommonPrefix(strs = ["flower","flow","flight"]))

输出:

fl


3. 2的幂


给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。

如果存在一个整数 x 使得 n == 2^x ,则认为 n 是 2 的幂次方。


示例 1:

输入:n = 1

输出:true

解释:20 = 1


示例 2:

输入:n = 16

输出:true

解释:24 = 16


示例 3:

输入:n = 3

输出:false


示例 4:

输入:n = 4

输出:true


示例 5:

输入:n = 5

输出:false


提示:

   -2^31 <= n <= 2^31 - 1

进阶:你能够不使用循环/递归解决此问题吗?


代码:


class Solution:
    def isPowerOfTwo(self, n):
        z = bin(n)[2:]
        if z[0] != "1":
            return False
        for item in z[1:]:
            if item != "0":
                return False
        return True
# %%
s = Solution()
print(s.isPowerOfTwo(1))
print(s.isPowerOfTwo(16))
print(s.isPowerOfTwo(3))
print(s.isPowerOfTwo(4))
print(s.isPowerOfTwo(5))

输出:

True

True

False

True

False

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