📅  最后修改于: 2023-12-03 15:11:33.156000             🧑  作者: Mango
本算法测验是 SP2 竞赛中的第 48 章,旨在检验程序员的算法能力和编程技能。本测验包含多个算法问题,需要程序员根据题目描述编写符合要求的代码,并进行正确的测试。
给定一个字符串,请编写一个函数,将其反转输出。
示例:
输入: "hello world"
输出: "dlrow olleh"
给定一棵二叉树,请编写三个函数,分别实现前序遍历、中序遍历和后序遍历。
给定一个 n × n 的矩阵,请编写一个函数,将其顺时针旋转 90 度后输出。
示例:
输入:
1 2 3
4 5 6
7 8 9
输出:
7 4 1
8 5 2
9 6 3
给定一个只包含小括号、中括号和大括号的字符串,请编写一个函数,判断括号是否匹配。
示例:
输入: "{[()]}"
输出: true
给定两个数 a 和 b,请编写一个函数,求它们的最大公约数。
## 代码片段
### 字符串反转
```python
def reverse_string(s: str) -> str:
"""
反转字符串函数
:param s: 待反转的字符串
:return: 反转后的字符串
"""
return s[::-1]
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def inorder_traversal(root: TreeNode) -> List[int]:
"""
中序遍历函数
:param root: 二叉树的根节点
:return: 中序遍历结果
"""
res = []
def inorder(node: TreeNode):
if not node:
return
inorder(node.left)
res.append(node.val)
inorder(node.right)
inorder(root)
return res
def preorder_traversal(root: TreeNode) -> List[int]:
"""
前序遍历函数
:param root: 二叉树的根节点
:return: 前序遍历结果
"""
res = []
def preorder(node: TreeNode):
if not node:
return
res.append(node.val)
preorder(node.left)
preorder(node.right)
preorder(root)
return res
def postorder_traversal(root: TreeNode) -> List[int]:
"""
后序遍历函数
:param root: 二叉树的根节点
:return: 后序遍历结果
"""
res = []
def postorder(node: TreeNode):
if not node:
return
postorder(node.left)
postorder(node.right)
res.append(node.val)
postorder(root)
return res
def rotate_matrix(matrix: List[List[int]]) -> List[List[int]]:
"""
顺时针旋转矩阵函数
:param matrix: 待旋转的矩阵
:return: 旋转后的矩阵
"""
n = len(matrix)
for i in range(n // 2):
for j in range(i, n - i - 1):
temp = matrix[i][j]
matrix[i][j] = matrix[n - j - 1][i]
matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1]
matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1]
matrix[j][n - i - 1] = temp
return matrix
def is_valid_parentheses(s: str) -> bool:
"""
判断字符串括号是否匹配函数
:param s: 待判断的字符串
:return: 是否匹配
"""
stack = []
mapping = {')': '(', ']': '[', '}': '{'}
for char in s:
if char in ['(', '[', '{']:
stack.append(char)
elif stack and mapping[char] == stack[-1]:
stack.pop()
else:
return False
return not stack
def gcd(a: int, b: int) -> int:
"""
最大公约数函数
:param a: 数字1
:param b: 数字2
:return: 最大公约数
"""
return gcd(b, a % b) if b != 0 else a