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/


目录
相关文章
|
12月前
10_填充每个节点的下一个右侧节点指针
10_填充每个节点的下一个右侧节点指针
|
Python
【Leetcode刷题Python】50. Pow(x, n)
本文介绍了LeetCode第50题"Pow(x, n)"的解法,题目要求实现计算x的n次幂的函数,文章提供了递归分治法的详细解析和Python实现代码。
134 1
|
存储 SQL 算法
LeetCode 题目 117:填充每个节点的下一个右侧节点指针 II
LeetCode 题目 117:填充每个节点的下一个右侧节点指针 II
|
存储 SQL 算法
LeetCode 题目 116:填充每个节点的下一个右侧节点指针
LeetCode 题目 116:填充每个节点的下一个右侧节点指针
|
存储 算法 数据挖掘
LeetCode第十六题: 掌握双指针技巧 最接近的三数之和 【python】
LeetCode第十六题: 掌握双指针技巧 最接近的三数之和 【python】
|
存储 C语言
链表—初始化指针变和创建新的节点------区别应用分析
链表—初始化指针变和创建新的节点------区别应用分析
113 0
|
6月前
|
机器学习/深度学习 存储 设计模式
Python 高级编程与实战:深入理解性能优化与调试技巧
本文深入探讨了Python的性能优化与调试技巧,涵盖profiling、caching、Cython等优化工具,以及pdb、logging、assert等调试方法。通过实战项目,如优化斐波那契数列计算和调试Web应用,帮助读者掌握这些技术,提升编程效率。附有进一步学习资源,助力读者深入学习。
|
3月前
|
Python
Python编程基石:整型、浮点、字符串与布尔值完全解读
本文介绍了Python中的四种基本数据类型:整型(int)、浮点型(float)、字符串(str)和布尔型(bool)。整型表示无大小限制的整数,支持各类运算;浮点型遵循IEEE 754标准,需注意精度问题;字符串是不可变序列,支持多种操作与方法;布尔型仅有True和False两个值,可与其他类型转换。掌握这些类型及其转换规则是Python编程的基础。
207 33
|
2月前
|
数据采集 分布式计算 大数据
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
78 1
|
3月前
|
设计模式 安全 Python
Python编程精进:正则表达式
正则表达式是一种强大的文本处理工具,用于搜索、匹配和提取模式。本文介绍了正则表达式的语法基础,如`\d`、`\w`等符号,并通过实例展示其在匹配电子邮件、验证电话号码、处理日期格式等场景中的应用。同时,文章提醒用户注意性能、编码、安全性等问题,避免常见错误,如特殊字符转义不当、量词使用错误等。掌握正则表达式能显著提升文本处理效率,但需结合实际需求谨慎设计模式。
134 2

推荐镜像

更多