刷题与实践感悟Day23 | 豆包MarsCode AI 刷题

161 阅读7分钟

问题描述

数字魔法师小U发现了一种特殊的数字变换魔法。这个魔法可以对一个数字字符串进行"进位"操作。每次操作规则如下:

  • 对字符串中的每个数字进行加一操作
  • 当某位数字为9时,加一后变成 0,并在前面补 1

例如:

  • "798" 经过一次操作变成 "8109"(7→8, 9→0并向前增加一个1, 8→9)
  • "999" 经过一次操作变成 "101010"

现在给定一个数字字符串 num_str(长度为n)和操作次数 k,请计算经过 k 次操作后得到的最终结果。由于结果可能非常大,请将答案对 1000000007 (10^9 + 7) 取模。

输入

  • 第一行包含两个整数 n 和 k(1 ≤ n ≤ 50, 1 ≤ k ≤ 100)
  • 第二行包含一个长度为n的数字字符串 num_str,仅由数字0-9组成

返回

  • 返回一个整数,表示最终结果对 1000000007 取模后的值

解题思路

我们需要对给定数字字符串按照特定的 “进位” 规则进行多次操作,并最终将结果对 1000000007 取模返回。其核心思路是通过循环 k 次,每次遍历数字字符串中的每个数字,根据规则进行变换,得到新的数字字符串,最后对处理后的结果取模。

定义函数与取模常量:用于后续对最终结果进行取模操作,以避免可能出现的整数溢出问题,确保结果在合理的数值范围内。

循环执行数字变换操作

  • 外层的 for _ in range(k) 循环:控制整个数字变换操作的次数,会按照给定的 k 值重复执行内部的数字变换逻辑。

  • 每次循环内部的操作如下:

    • 首先创建一个空字符串 new_number,用于存储本次循环中根据规则变换数字字符串 num_str 后得到的新数字字符串。

    • 然后通过内层的 for i in num_str 循环遍历当前的数字字符串 num_str 中的每一个字符 i。对于每个字符 i,执行以下操作:

      • 当 int(i) == 9 时:按照规则,数字 9 加一后应该变为 0 并向前一位进位 1。这里代码将 i 赋值为 "10"(这种处理方式是一种简单的模拟进位的做法,但存在一些潜在问题,后面会提到),然后将 "10" 添加到 new_number 中。
      • 当 int(i)!= 9 时:将字符 i 转换为整数后加 1,再转换回字符串形式,即 i = str(int(i)+1),然后将得到的新字符串添加到 new_number 中。
    • 最后,将本次循环得到的新数字字符串 new_number 赋值给 num_str,以便在下一次循环中继续对其进行变换操作。

取模操作:在完成了 k 次数字变换操作后,将最终得到的数字字符串 num_str 转换为整数,然后对之前定义的取模常量 MOD 取模,得到的结果就是经过 k 次操作后最终结果对 1000000007 取模的值,也就是函数要返回的答案。

代码展示

def solution(n: int, k: int, num_str: str) -> int:
    # Please write your code here
    MOD = 1000000007
    for _ in range(k):
        new_number = ""
        for i in num_str:
            if int(i) == 9:
                i = "10"
                new_number += i
            else:
                i = str(int(i)+1)
                new_number += i
        num_str = new_number
    return int(num_str) % MOD

测试样例

样例1:

输入:n = 3 ,k = 1 ,num_str = "798"
返回:8109
解释:798 经过一次操作变成 8109

样例2:

输入:n = 3 ,k = 3 ,num_str = "798"
返回:103221

  • 第一次操作:798 → 8109
  • 第二次操作:8109 → 92110
  • 第三次操作:92110 → 103221

样例3:

输入:n = 4 ,k = 3 ,num_str = "7989"
返回:10322132

AI刷题报错

image.png

可能的错误原因

  1. 进位处理错误
  • 当某位数字为9时,你将其替换为 "10",这会导致字符串长度增加,但进位处理不正确。
  • 例如,对于 "798",处理后变为 "7108",而不是 "8109"。
  1. 字符串拼接问题
  • 每次操作后,字符串拼接可能会导致结果不正确。
  • 例如,对于 "798",处理后变为 "7108",而不是 "8109"。
  • 于是我一直让他自查自改,最终还是没有解决问题,

AI刷题实践感悟

我觉得刷题对我这种小白而言是为了更好的看懂代码,理解代码,学习,最终能够自己独立写代码,刚开始的时候只有一点点python语法基础,对很多东西都不懂,一入苦学深似海,无论是每日刷题还是AI练中学,都感觉有一条鸿沟深不见底,学不懂很是内耗,marscode在很大程度上帮助了我从生硬的理论知识记忆逐渐帮我摆脱舒适区,反复的读代码与尝试写代码,ai老师改错修正,能够让我对基本的思维能力有了很大的提升,能够一眼知道哪些题会哪些题不会,虽然我还分不清那些属于神那么,但是在面对不同类型的题目时,基本迅速分析问题的本质,尝试多种解题思路,并在不同思路之间进行比较和权衡。这种多维度的思考方式是难能可贵的,而这正是 AI 研发中不可或缺的素质。在处理一些综合性较强的算法题时,我是压根儿不会,但AI刷题似乎也不太会,有些时候很是智障,他自己写的代码也没对,让他改也改不对,分析原因也大差不多就是做不对,不过也比我强多了哈哈哈哈。

刷题实践不仅仅是为了应对一道道孤立的题目,更是为了将所学知识应用到实际的 AI 项目中。在完成了大量的刷题训练后,我深刻体会到算法和数据结构在 AI 中的核心地位。例如,在构建一个图像识别模型时,数据的存储和处理需要合理运用数组、矩阵等数据结构,而模型的训练过程则涉及到梯度下降等优化算法的应用。通过刷题所积累的算法优化经验,我能够更好地调整模型的参数,提高模型的训练效率和准确性。

同时,刷题过程中培养的问题解决能力和编程技巧也为我在 AI 项目开发中提供了坚实的保障。在面对实际项目中的各种技术难题时,我能够迅速运用所学知识进行分析和解决,并且能够高效地编写代码实现解决方案。例如,在开发一个自然语言处理应用时,需要处理大量的文本数据,这就要求我熟练运用字符串处理算法和数据结构来进行文本清洗、分词、特征提取等操作,而这些技能都是在刷题实践中不断磨砺而成的。

然而,刷题实践也让我认识到,单纯的编程能力并不能满足 AI 应用开发的需求。AI 是一个跨学科的领域,除了技术层面的知识外,还需要对数学、统计学、领域知识等有深入的理解。在实际项目中,我常常需要运用数学知识来推导模型的公式、进行数据分析和评估,同时还需要了解具体应用领域的业务逻辑和需求,以便更好地设计和优化 AI 系统。因此,在今后的学习和实践中,我将更加注重多学科知识的融合与应用,努力提升自己的综合素质,以更好地应对 AI 应用开发中的各种挑战。