刷题实践 | 豆包MarsCode AI 刷题

216 阅读4分钟

AI刷题平台提供了一个便捷好用的Marscode AI助手。总的来说AI刷题的优势可以总结为以下5点:

  1. 即时反馈:AI助手可以立即检查代码的正确性,并提供详细的错误信息,帮助用户快速定位和解决问题。

  2. 个性化指导:AI助手可以根据用户的代码和错误,提供个性化的建议和改进方案,帮助用户更好地理解和掌握编程概念。

  3. 学习路径优化:AI助手可以根据用户的学习进度和掌握程度,推荐合适的题目和学习资源,帮助用户更高效地学习。

  4. 代码优化建议:AI助手可以分析代码的时间和空间复杂度,并提供优化建议,帮助用户写出更高效的代码。

  5. 自动化测试:AI助手可以自动生成测试用例,帮助用户验证代码的正确性和鲁棒性。

实践案例分析

案例:数字魔法的加一操作

首先AI助手会对你提出的问题进行理解,即根据题意需要对一个数字字符串进行多次加一操作,并且每次操作可能会导致字符串长度增加。最终结果需要对 1000000007 取模。

根据题目要求AI助手会推荐你数据结构选择:由于每次操作可能会改变字符串的长度,使用列表来存储数字会更方便,因为列表可以动态调整大小。

AI助手随后会给出算法设计的步骤:

  1. 初始化:将输入的数字字符串转换为整数列表。
  2. 循环操作:对每个数字进行加一操作,如果数字为9,则变为0并在前面补1。
  3. 转换回字符串:将最终的整数列表转换回字符串。
  4. 取模:将结果对 1000000007 取模。

根据AI助手提供的帮助,我可以很轻松的写出如下代码:

MOD = 10**9+7
def solution(n, k, num_str):
    # 将输入的数字字符串转换为整数列表
    cur_str = list(map(int, num_str))
    # 进行 k 次操作
    for _ in range(k):
        tmp = []
        for c in cur_str:
            if 0 <= c <= 8:
                # 如果数字在0到8之间,直接加一
                tmp.append(c + 1)
            else:
                # 如果数字是9,变为0并在前面补1
                tmp.extend([1, 0])
        cur_str = tmp
    
    # 将整数列表转换回字符串
    cur_str = list(map(str, cur_str))
    
    # 将字符串转换为整数并取模
    return int("".join(cur_str)) % MOD

if __name__ == "__main__":
    # 你可以添加更多测试用例
    print(solution(3, 1, "798") == 8109)
    print(solution(3, 3, "798") == 103221)

在写出第一版的代码后,我还能让AI助手帮我进行代码检查,告诉我还有哪些可以修改和提高的地方。如下就是AI助手对我代码的分析和建议:

分析

  1. 逻辑正确性

    • 代码逻辑基本正确,能够对数字字符串进行加一操作,并且在遇到9时正确处理进位。
    • 最终结果也对 1000000007 取模,符合题目要求。
  2. 代码优化

    • 代码中使用了 list(map(int, num_str))list(map(str, cur_str)) 进行类型转换,这些操作是必要的。
    • 在处理进位时,使用了 tmp.extend([1,0]),这也是正确的。
  3. 测试用例

    • 你提供了两个测试用例,分别是 solution(3, 1, "798")solution(3, 3, "798"),这两个测试用例能够验证代码的基本功能。
    • 建议添加更多的测试用例,特别是边界情况和特殊情况,以确保代码的鲁棒性。

建议

  1. 添加更多测试用例

    • 例如,测试 solution(1, 1, "9")solution(4, 3, "7989") 等边界情况。
  2. 代码可读性

    • 可以考虑添加一些注释,解释代码的关键步骤,提高代码的可读性。
  3. 性能优化

    • 当前代码的时间复杂度为 O(n * k),其中 n 是字符串长度,k 是操作次数。对于较大的 n 和 k,性能可能会受到影响。
    • 如果需要进一步优化,可以考虑使用更高效的算法或数据结构。

你的代码基本正确,能够完成题目要求的功能。建议添加更多测试用例以确保代码的鲁棒性,并考虑在必要时进行性能优化。

总结

Marscode AI助手在刷题过程中的优势主要体现在即时反馈、个性化指导、学习路径优化、代码优化建议和自动化测试等方面。通过这些功能,AI 可以帮助用户更高效地学习和掌握编程技能,提升解决复杂问题的能力。