📜  算法测验| SP2竞赛1 |第48章(1)

📅  最后修改于: 2023-12-03 15:11:33.156000             🧑  作者: Mango

算法测验 | SP2竞赛1 |第48章

简介

本算法测验是 SP2 竞赛中的第 48 章,旨在检验程序员的算法能力和编程技能。本测验包含多个算法问题,需要程序员根据题目描述编写符合要求的代码,并进行正确的测试。

题目列表
  1. 字符串反转
  2. 二叉树遍历
  3. 矩阵旋转
  4. 括号匹配
  5. 最大公约数
题目描述
字符串反转

给定一个字符串,请编写一个函数,将其反转输出。

示例:

输入: "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,请编写一个函数,求它们的最大公约数。

要求
  1. 所有的函数必须按照要求进行命名,并在函数头部给出必要的注释说明。
  2. 所有的函数必须按照题目要求返回正确的结果,并进行必要的异常判断。
  3. 所有的函数必须经过充分测试,保证能够正确运行。
## 代码片段

### 字符串反转

```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