算法&&学习心得 | 豆包MarsCode AI刷题

43 阅读3分钟

一.量化数字的统计

50e0dc848664e6e487faf63a86271ef3.png

根据题目描述,一个数字是“量化数字”当且仅当它满足以下两个条件:

  1. 该数字能被3整除。
  2. 该数字的所有位数都是相同的数字。

例如,数字666是一个量化数字,因为它能被3整除,并且所有位数都是6。

接下来,我们来看代码是如何实现这个功能的:

  1. 函数 check(i) :

    这个函数用来检查一个数字的所有位数是否相同。它将数字转换为字符串,然后检查字符串中的每个字符是否都和第一个字符相同。

  2. 函数 solution(L: int, R: int) -> int:

这个函数用来计算在 LL 到 RR 范围内所有量化数字的数量。

首先,它初始化一个计数器 count 为0。

然后,它遍历1到9之间的每个数字(因为一个数字的每一位只能是1到9之间的数字)。对于每个数字,它生成所有可能的量化数字。

例如,如果当前数字是3,它会生成33, 333, 3333等,直到生成的数字超过 RR。 -
在生成每个量化数字后,它检查这个数字是否在 LL 和 RR 之间,并且是否能被3整除。如果满足这两个条件,它将计数器 count 增加1。 -
最后,函数返回计数器 count 的值,即 LL 到 RR 范围内量化数字的数量。

代码如下所示:

def check(i):
    s = str(i)
    return all(c == s[0] for c in s)


def solution(L: int, R: int) -> int:
    count = 0
    for digit in range(1, 10):
        num = digit
        while num <= R:
            if num >= L and num % 3 == 0:
                count += 1
            num = num * 10 + digit  
    return count
    

二.学习心得

作为一名参加青训营X豆包MarsCode训练营的学员,今天的训练不光是关于如何高效解题,更是一次自我思维方式和问题分析能力的锻炼。通过AI刷题平台MarsCode的辅助,我逐渐意识到刷题背后的深层次逻辑和思考过程,而不仅仅是对代码的单纯实现。

随着难度的逐步提高,开始挑战一些具有挑战性的题目,涉及到动态规划、回溯算法等。这些题目不再是单纯的实现,而是考察我的问题分解能力和思维的灵活性。

在做这些题目时,我首先要做的是理解问题的本质。动态规划并非一开始就能写出完美的解法,通常它需要将大问题拆解成多个小问题,并通过状态转移方程将问题逐步解决。我特别注重“最优子结构”和“重叠子问题”的概念。每一次看一个动态规划题目,我都会先通过手动推演来思考这个问题的解法。

对于未来的规划,我意识到自己需要更加注重算法的多样性和解决问题时的灵活性。在接下来的训练中,我将更加注重总结每个问题的解决思路,理解不同算法的优劣,并不断提升自己的代码优化能力。

总之,青训营X豆包MarsCode的刷题之旅不仅是一次对编程能力的提升,也是一次对自己思维方式的锻炼。通过AI平台的辅助,我逐渐明白,刷题不仅仅是为了“做题”,更是为了培养解决问题的系统性思维和高效的编程技巧。希望未来的我,能够继续在这一过程中不断进步,成为一名更优秀的程序员。