小I的数字圆圈问题 | 豆包MarsCode AI刷题

123 阅读3分钟

前言

在数字的世界里,圆圈的数量有时候会成为一个有趣的谜题。小I遇到这样一个问题:给定一串数字字符,她需要计算其中一共有多少个圆圈。问题的规则简单而巧妙:不同的数字会包含不同数量的圆圈。通过一个小小的挑战,我们能学到如何通过条件判断和遍历字符串来解决这类问题。

问题描述

给定一串数字字符 s,需要计算其中包含的圆圈总数。具体规则如下:

  • 数字 069 各含有一个圆圈。
  • 数字 8 含有两个圆圈。
  • 其他数字(123457)不含有任何圆圈。

示例

  • 示例1:

    • 输入:s = "1234567890"
    • 输出:5
    • 解释:数字 069 各含有 1 个圆圈,数字 8 含有 2 个圆圈,总共有 5 个圆圈。
  • 示例2:

    • 输入:s = "8690"
    • 输出:5
    • 解释:数字 8 含有 2 个圆圈,数字 69 各含有 1 个圆圈,总共有 5 个圆圈。
  • 示例3:

    • 输入:s = "1111"
    • 输出:0
    • 解释:没有任何数字含有圆圈,因此输出 0。

image.png

解题思路

1. 数字与圆圈的映射

我们通过一个简单的映射来实现对数字圆圈数量的统计:

  • 数字 069 各贡献 1 个圆圈。
  • 数字 8 贡献 2 个圆圈。
  • 其他数字(123457)不贡献任何圆圈。

2. 遍历字符串

我们可以通过遍历输入的字符串,对于每个字符判断其是否对应于含有圆圈的数字,并累加相应的圆圈数量。

3. 具体实现

下面是基于上述思路编写的代码实现:

public class Main {
    // 计算数字字符串中圆圈的数量
    public static int solution(String s) {
        // 用于保存总的圆圈数
        int totalCircles = 0;

        // 遍历字符串中的每一个字符
        for (char c : s.toCharArray()) {
            switch (c) {
                case '0': 
                case '6': 
                case '9':
                    totalCircles += 1; // 数字0、6、9每个包含1个圆圈
                    break;
                case '8':
                    totalCircles += 2; // 数字8包含2个圆圈
                    break;
                default:
                    // 其他数字(1、2、3、4、5、7)不含有任何圆圈
                    break;
            }
        }

        // 返回计算得到的圆圈总数
        return totalCircles;
    }

    public static void main(String[] args) {
        // 测试案例
        System.out.println(solution("1234567890") == 5); // 预期输出:5
        System.out.println(solution("8690") == 5); // 预期输出:5
        System.out.println(solution("1111") == 0); // 预期输出:0
    }
}


代码解释

步骤1:遍历字符串

我们首先将输入的字符串转化为字符数组,并逐个字符进行判断。通过 switch 语句,我们针对每一个字符检查它是否属于含有圆圈的数字,并根据规则累加圆圈数量。

步骤2:圆圈数量的累加

对于 069,我们将圆圈数量加 1;对于 8,我们将圆圈数量加 2。其他数字不做任何操作。

步骤3:返回结果

最后,我们返回累加的圆圈总数,完成计算。


测试结果

  • 输入 s = "1234567890",输出 5
  • 输入 s = "8690",输出 5
  • 输入 s = "1111",输出 0

通过这些测试,可以确认我们的代码正确地计算了每串数字中的圆圈总数。


复杂度分析

时间复杂度

  • 我们遍历字符串的每个字符,时间复杂度为 O(n) ,其中 n 是字符串的长度。

空间复杂度

  • 我们只使用了常数的额外空间来存储累加结果,空间复杂度为 O(1)

总结

这个问题看似简单,但通过条件判断和遍历字符串,能够高效地计算出数字中的圆圈总数。在实际编程中,如何清晰地定义问题并合理使用控制结构是非常重要的。希望通过这个题目,大家能够体会到如何通过条件判断来解决实际问题,并提高代码的可读性与效率。