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/