AlgoMooc
← 返回题库

K0000. 圈复杂度计算

中等通过率 19% · 提交 528 · 通过 98
DFS回溯图论记忆化搜索

小慕正在参与一个代码复杂度分析项目,他需要计算以下三份代码的。 第1份代码:

def find_paths(maze, x, y, path=None, visited=None):
    if path is None:
        path = []
    if visited is None:
        visited = set()

    rows, cols = len(maze), len(maze[0])

    # 检查是否到达终点
    if x == rows - 1 and y == cols - 1:
        return [path + [(x, y)]]

    # 标记当前点为已访问
    visited.add((x, y))
    path.append((x, y))

    # 定义方向:右、下、左、上
    directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
    paths = []

    for dx, dy in directions:
        nx, ny = x + dx, y + dy
        if 0 <= nx < rows and 0 <= ny < cols and (nx, ny) not in visited and maze[nx][ny] == 0:
            paths.extend(find_paths(maze, nx, ny, path[:], visited.copy()))

    return paths

第2份代码:

def coin_change(coins, amount):
    # dp[i] 表示组成金额 i 所需的最少硬币数
    dp = [float('inf')] * (amount + 1)
    dp[0] = 0  # 组成金额 0 不需要任何硬币

    for coin in coins:
        for i in range(coin, amount + 1):
            dp[i] = min(dp[i], dp[i - coin] + 1)

    return dp[amount] if dp[amount] != float('inf') else -1

第3份代码:

def validate_and_process_parentheses(s):
    stack = []  # 用于存储索引
    matched = [-1] * len(s)  # 标记每个位置是否匹配

    for i, char in enumerate(s):
        if char == '(':
            stack.append(i)
        elif char == ')' and stack:
            match_index = stack.pop()
            matched[match_index] = i  # 记录匹配的位置
            matched[i] = match_index

    is_balanced = all(matched[i] != -1 for i in range(len(s)) if s[i] in "()")

    # 寻找最长

提示:带虚线的词点一下有通俗解释。

输入描述

输出描述

打印三行整数分别表示它们的圈复杂度,例如: ``` 100 1000 10000 ``` 对于这道题目,如果使用python代码打印那就是: ```py print(100) print(1000) print(10000) ```

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解(训练营专属)

登录后查看题目图解

题目图解为训练营学员专属内容,请先登录。

微信扫码登录还不是训练营学员?了解训练营 →
写完代码点「提交」,将对全部测试用例判题。