AI 刷题 39. 计算从x到y的最少步数 题解 | 豆包MarsCode AI刷题

144 阅读1分钟

要解决这个问题,我们需要找到从位置 𝑥x 到位置 𝑦y 的最短路径,满足每一步的步长变化规则。具体来说,步长必须是连续整数,且首末两步的步长必须是1。

解题思路

1. 计算距离:

  • 首先计算从起始位置 𝑥x 到目标位置 𝑦y 的距离:distance=∣𝑦−𝑥∣distance=∣y−x∣。

  • 步长变化:

  • 我们需要找到一种步长序列,使得总步数最小。

  • 由于首末步长必须是1,我们可以考虑从1开始增加步长,直到达到或超过一半的距离,然后对称地减少步长。

  • 模拟步长变化:

  • 从步长1开始,逐步增加步长,直到步长的累加和达到或超过距离的一半。

  • 然后对称地减少步长,直到步长为1。

  • 实现步骤:

  • 计算距离。

  • 模拟步长变化,计算最小步数。

代码实现

def min_steps(x, y):
    # 计算距离
    distance = abs(y - x)
    
    # 特殊情况:起点和终点相同
    if distance == 0:
        return 0
    
    # 初始化步长和步数
    step = 0
    total_steps = 0
    current_distance = 0
    
    # 增加步长直到超过一半的距离
    while current_distance < distance:
        step += 1
        current_distance += step
        total_steps += 1
        if current_distance >= distance:
            break
    
    # 减少步长
    while current_distance > distance:
        current_distance -= step
        step -= 1
        total_steps += 1
    
    return total_steps

复杂度分析

  • 时间复杂度:𝑂(𝑑)O(d​),其中 𝑑d 是距离,因为步长的增加和减少过程最多需要 𝑑d​ 次。

  • 空间复杂度:𝑂(1)O(1),因为只使用了固定数量的变量。

通过这种方法,我们可以有效地计算从位置 𝑥x 到位置 𝑦y 的最小步数,满足步长变化的规则。