Python每日一练(20230404)

简介: Python每日一练(20230404)

1. Pow(x, n)


实现 pow(x, n),即计算 x 的 n 次幂函数(即,x^n)。


示例 1:


输入:x = 2.00000, n = 10

输出:1024.00000


示例 2:

输入:x = 2.10000, n = 3

输出:9.26100


示例 3:

输入:x = 2.00000, n = -2

输出:0.25000

解释:2-2 = 1/22 = 1/4 = 0.25


提示:

   -100.0 < x < 100.0

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

   -10^4 <= xn <= 10^4


出处:

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

代码:


class Solution:
    def myPow(self, x, n):
        if n == 0:
            return 1
        res ,curr = 1, abs(n)
        while curr > 0:
            if curr & 1 == 1:
                res *= x
            curr >>= 1
            x *= x
        if n < 0:
            return 1 / res
        return  res
# %%
s = Solution()
print(s.myPow(x = 2.00000, n = 10))

输出:

1024.0


2. 括号生成

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。


示例 1:

输入:n = 3

输出:["((()))","(()())","(())()","()(())","()()()"]


示例 2:

输入:n = 1

输出:["()"]


提示:

   1 <= n <= 8

出处:

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

代码:

from typing import List
class Solution:
    def generateParenthesis(self, n: int) -> List[str]:
        def gen(p, lc, rc, r, n):
            if lc > n:
                return
            if lc == n and rc == n:
                r.append(''.join(p))
            p.append('(')
            lc += 1
            gen(p, lc, rc, r, n)
            p.pop()
            lc -= 1
            if lc > rc:
                p.append(')')
                rc += 1
                gen(p, lc, rc, r, n)
                p.pop()
                rc -= 1
        results = []
        gen([], 0, 0, results, n)
        return results
# %%
s = Solution()
print(s.generateParenthesis(n = 3))


输出:

['((()))', '(()())', '(())()', '()(())', '()()()']


3. 填充每个节点的下一个右侧节点指针 II


给定一个二叉树

struct Node {
int val;
Node *left;
Node *right;
Node *next;
}



填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。


初始状态下,所有 next 指针都被设置为 NULL。


进阶:

   你只能使用常量级额外空间。

   使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。


示例:

a5d95fc158b54c265e39bd7e6183494d.png


输入:root = [1,2,3,4,5,null,7]

输出:[1,#,2,3,#,4,5,7,#]

解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化输出按层序遍历顺序(由 next 指针连接),'#' 表示每层的末尾。


提示:

   树中的节点数小于 6000

   -100 <= node.val <= 100

出处:

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

代码:


class Node(object):
    def __init__(self, val, left, right, next):
        self.val = val
        self.left = left
        self.right = right
        self.next = next
class Solution:
    def connect(self, root: Node) -> Node:
        if root == None:
            return None
        firstNode = root
        while firstNode:
            while firstNode and firstNode.left == None and firstNode.right == None:
                firstNode = firstNode.next
            if firstNode == None:
                break
            cur = firstNode
            pre = None
            while cur:
                if cur.left:
                    if pre:
                        pre.next = cur.left
                    pre = cur.left
                if cur.right:
                    if pre:
                        pre.next = cur.right
                    pre = cur.right
                cur = cur.next
            firstNode = firstNode.left if firstNode.left else firstNode.right
        return root
def listToTree(lst: list) -> Node:
    if not lst:
        return None
    root = Node(lst[0],None,None,None)
    queue = [root]
    i = 1
    while i < len(lst):
        node = queue.pop(0)
        if lst[i] is not None:
            node.left = Node(lst[i],None,None,None)
            queue.append(node.left)
        i += 1
        if i < len(lst) and lst[i] is not None:
            node.right = Node(lst[i],None,None,None)
            queue.append(node.right)
        i += 1
    return root
if __name__ == "__main__":
    s = Solution()
    null = None
    nums = [1,2,3,4,5,null,7]
    root = listToTree(nums)
    result = s.connect(root)
    while result:
        cur = result
        while cur:
            print(cur.val, end=' ')
            cur = cur.next
        print("#", end=' ')
        result = result.left



输出:

1 # 2 3 # 4 5 7 #






目录
相关文章
|
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

推荐镜像

更多