Python每日一练(20230404) Pow(x, n)、括号生成、填充每个节点的下一个右侧节点指针 II

简介: Python每日一练(20230404) Pow(x, n)、括号生成、填充每个节点的下一个右侧节点指针 II

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

进阶:

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

示例:

输入: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 #


🌟 每日一练刷题专栏 🌟

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

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

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

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

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


目录
相关文章
10_填充每个节点的下一个右侧节点指针
10_填充每个节点的下一个右侧节点指针
|
3月前
|
Python
【Leetcode刷题Python】450. 删除二叉搜索树中的节点
LeetCode上538号问题"把二叉搜索树转换为累加树"的Python实现,使用反向中序遍历并记录节点值之和来更新每个节点的新值。
37 4
【Leetcode刷题Python】450. 删除二叉搜索树中的节点
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
52 5
|
3月前
|
Python
【Leetcode刷题Python】222. 完全二叉树的节点个数
LeetCode第222题"完全二叉树的节点个数"的Python代码实现,通过递归和深度优先遍历的方法来计算给定完全二叉树的节点总数。
37 5
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
41 4
|
3月前
|
机器学习/深度学习 数据可视化 Python
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
该博客展示了如何通过Python预处理神经网络权重矩阵并将其导出为表格,然后使用Chiplot网站来可视化神经网络的神经元节点之间的连接。
54 0
如何可视化神经网络的神经元节点之间的连接?附有Python预处理代码
|
3月前
|
Python
【Python】解决pandas读取excel,以0向前填充的数字会变成纯数字
本文介绍了两种解决Python使用pandas库读取Excel时,数字前填充的0丢失问题的方法:一是在读取时指定列以字符串格式读取,二是在Excel中预先将数值转换为文本格式。
202 0
【Python】解决pandas读取excel,以0向前填充的数字会变成纯数字
|
3月前
|
Python
在线问诊 Python、FastAPI、Neo4j — 创建 节点关系
在线问诊 Python、FastAPI、Neo4j — 创建 节点关系
27 0
|
3月前
|
Python
在线问诊 Python、FastAPI、Neo4j — 创建 饮食节点
在线问诊 Python、FastAPI、Neo4j — 创建 饮食节点
28 0
|
3月前
|
Python
在线问诊 Python、FastAPI、Neo4j — 创建 疾病节点
在线问诊 Python、FastAPI、Neo4j — 创建 疾病节点
45 0