青训营X豆包MarsCode 技术训练营第二课 | 豆包MarsCode AI 刷题

33 阅读1分钟

p整数生成问题

image.png 我们需要找到所有小于或等于 m 的 P整数,这些整数可以表示为 x^i + y^j,其中 i >= 0 且 j >= 0。我们需要确保每个结果只出现一次,并且最终结果需要从小到大排序。

数据结构选择

  • 使用集合(set)来存储结果,这样可以自动去重。
  • 最后将集合转换为列表并排序。

算法步骤

  1. 初始化集合:使用一个集合来存储所有满足条件的强整数。

  2. 生成所有可能的 x^i 和 y^j

    • 使用两个嵌套循环,分别遍历 i 和 j
    • 在每次循环中,计算 x^i 和 y^j,并检查它们的和是否小于或等于 m
    • 如果满足条件,将 x^i + y^j 添加到集合中。
  3. 转换并排序结果:将集合转换为列表,并对其进行排序。

  4. 返回结果。 def solution(x: int, y: int, m: int) -> list: result_set = set() # 使用集合来去重

    生成所有可能的 x^i 和 y^j

    for i in range(m): if x ** i > m: break for j in range(m): if y ** j > m: break # 计算 x^i + y^j power_sum = x ** i + y ** j if power_sum <= m: result_set.add(power_sum)

    将集合转换为列表并排序

    result_list = sorted(result_set) return result_list

if name == 'main': print(solution(x=2, y=3, m=10) == [2, 3, 4, 5, 7, 9, 10]) print(solution(x=3, y=5, m=15) == [2, 4, 6, 8, 10, 14]) print(solution(x=2, y=1, m=20) == [2, 3, 5, 9, 17])