掘金刷题之路 Day 11 | 豆包MarsCode AI刷题

127 阅读5分钟

题解:如何计算从1到n之间的“好数”数量

问题分析

小C对“好数”非常感兴趣,她定义一个不含前导零的正整数为“好数”,如果它的所有数位最多包含两种不同的数字。举个例子:

  • 数字 23 是好数,因为它只包含数字 2 和 3 两种。
  • 数字 2323 也是好数,因为它只包含数字 2 和 3 两种。
  • 数字 100 是好数,因为它只包含数字 1 和 0 两种。
  • 数字 101 是好数,因为它也只包含数字 1 和 0 两种。

我们的目标是:给定一个正整数 n,计算从 1n 之间一共有多少个“好数”。

我的思考

1. “好数”的定义

一个数是“好数”,当且仅当它的所有数位最多包含两种不同的数字。我们可以将每个数的每一位数字提取出来,记录它们出现的情况。如果不同的数字种类超过两个,就不是“好数”。

2. 解题步骤
  1. 判断一个数是否为“好数”

    • 用一个数组或集合来记录数字出现的情况,最多只能包含两个不同的数字。
    • 如果数字种类超过两个,直接返回 false,否则返回 true
  2. 遍历从1到n的所有整数

    • 对每个数字,检查它是否是“好数”,如果是,就增加计数。
  3. 返回结果

    • 遍历完后,返回计数值。

代码实现

#include <iostream>
using namespace std;

// 判断一个数是否为“好数”
bool isGoodNumber(int num) {
    bool digitSeen[10] = {false}; // 用于记录数字出现情况
    int distinctCount = 0; // 记录不同的数字个数

    while (num > 0) {
        int digit = num % 10;  // 获取数字的最后一位
        if (!digitSeen[digit]) {
            digitSeen[digit] = true;
            distinctCount++;
        }
        num /= 10; // 去除最后一位
    }

    return distinctCount <= 2; // 如果不同的数字不超过2个,返回true
}

int solution(int n) {
    int count = 0;
    for (int i = 1; i <= n; i++) {
        if (isGoodNumber(i)) {
            count++;
        }
    }
    return count;
}

int main() {
    // 测试案例
    cout << (solution(110) == 102) << endl;  // 输出: 1 (true)
    cout << (solution(1000) == 352) << endl; // 输出: 1 (true)
    cout << (solution(1) == 1) << endl;      // 输出: 1 (true)

    return 0;
}

刷题实践选题:功能亮点与刷题实践结合

在实际刷题过程中,AI刷题平台的功能亮点能够有效帮助我们理解并解决算法问题。以这道“好数”问题为例,以下是一些AI刷题平台的功能如何帮助我们更好地学习与提升:

1. 精选真题
  • 功能介绍AI刷题平台通过精选真实的编程面试题和竞赛题,帮助用户接触到最具挑战性和实际价值的题目。这些题目不仅能够提高我们的编程能力,还能让我们为真实的面试和比赛做好准备。
  • 对学习的价值:通过分析这些精选题目,尤其是一些经典的数学或算法题目,我们能够更深入地理解算法的应用和优化方法,从而提升解题能力。

在这个“好数”问题中,精选的题目类型和解法为我们提供了很好的思路,了解如何通过遍历和数字拆解来判断某个数是否符合条件。

2. 云端编辑器
  • 功能介绍AI刷题平台提供了集成的在线编辑器,支持多种编程语言,用户可以在云端直接编写、调试和运行代码。无需搭建本地开发环境。
  • 对学习的价值:云端编辑器让我们专注于算法的编写和调试,而不必浪费时间配置环境。特别是在解决这类简单遍历题时,我们能快速验证代码的正确性,并进行实时调试。
3. 个性化题目推荐
  • 功能介绍AI刷题平台会根据用户的解题进度、错题记录和薄弱领域,个性化地推荐适合的题目。这种推荐机制能够帮助用户避免做重复性过高或难度过大的题目。
  • 对学习的价值:例如,如果我们在解决“好数”类的题目时遇到困难,AI平台可能会推荐其他相似的题目或基础题目,帮助我们巩固基础知识,并逐步提高解题能力。
4. 数据分析与反馈
  • 功能介绍AI刷题平台会实时收集用户的做题数据,提供如题目完成时间、解题正确率、题目类型分析等详细反馈。
  • 对学习的价值:通过分析这些数据,平台能够帮助我们发现自己的薄弱环节。例如,如果我们在“数字遍历”题目中反复出错,平台会建议我们加大在该领域的训练。
5. 错题分析与复习
  • 功能介绍AI刷题平台根据学生的错误记录提供错题本,提醒用户定期复习错题,防止再次犯错。
  • 对学习的价值:通过错题分析,我们可以理解自己的思维误区,弥补不足,在下次解题时更加精准。

刷题实践:如何通过AI刷题平台提升解题能力

通过AI刷题平台,我们能够体验到以下几方面的学习提升:

  • 高效解决问题AI刷题平台提供的个性化推荐和精选题目,让我们能够始终保持在合适的难度范围内,避免做过于简单或复杂的题目。
  • 即时反馈:代码提交后,平台会立即反馈结果,帮助我们更快地找出问题并改进。
  • 智能分析与进阶学习:平台根据我们的历史做题数据,推荐更高阶的题目,并通过错题复习和定期反馈,帮助我们逐步进阶。

结论

通过“好数”这一题目,我们不仅学习了如何判断一个数字是否符合特定条件,还能够通过实践体验到AI刷题平台的强大功能。精选真题、云端编辑器、个性化推荐和数据分析等功能,不仅提高了解题效率,还帮助我们发现自己的薄弱环节,提升了整体编程能力。在刷题过程中,结合AI平台的优势,我们能够更快速地提高自己,最终达到掌握和应用算法的目的。