问题描述
小I拿到了一串数字字符,她想知道这串数字中一共有多少个圆圈。具体规则如下: 数字0、6、9各含有一个圆圈。 数字8含有两个圆圈。 其他数字不含有任何圆圈。 测试样例 样例1: 输入:s = "1234567890" 输出:5 样例2: 输入:s = "8690" 输出:5 样例3: 输入:s = "1111" 输出:0
思路
这道题目的核心思路十分清晰明了,就是遍历给定的数字字符字符串,针对字符串中的每一个字符,依据既定的规则去判断它包含圆圈的数量,然后将每个字符对应的圆圈数量累加起来,最终得到整个字符串中圆圈的总数量。
具体来说,由于题目已经明确规定了数字 0、6、9 各含有一个圆圈,数字 8 含有两个圆圈,其他数字不含圆圈,所以我们只需要依次查看字符串里的每个字符,当字符为 0、6、9 时,就在记录圆圈数量的变量上加 1;当字符是 8 时,就在变量上加 2;而若是其他数字,则不做任何累加操作,就这样逐个字符处理完整个字符串后,所得到的累加结果就是字符串中圆圈的总数了。
例如,对于输入字符串 “1234567890”,从第一个字符‘1’开始判断,它属于其他数字,不增加圆圈数量,接着到‘2’同样如此,当遇到‘6’时,按照规则要给圆圈数量计数加 1,继续往后处理,遇到‘8’就加 2,以此类推,遍历完整个字符串后,最终得到圆圈的总数量为 5 个。
代码解答
public class Main {
public static int solution(String s) {
int count = 0;
for (char ch : s.toCharArray()) {
switch (ch) {
case '0':
case '6':
case '9':
count += 1; // 每个包含一个圆圈
break;
case '8':
count += 2; // 包含两个圆圈
break;
// 其他数字不加圆圈
}
}
return count;
}
public static void main(String[] args) {
System.out.println(solution("1234567890") == 5); // 输出:true
System.out.println(solution("8690") == 5); // 输出:true
System.out.println(solution("1111") == 0); // 输出:true
}
}
#### 代码详解
在 solution 方法中,首先定义了一个变量 count 并初始化为 0,这个变量就是用来记录字符串中圆圈的总数的。然后通过 for 循环结合 toCharArray 方法,将输入的字符串 s 转换为字符数组进行遍历。
在循环内部,使用了 switch 语句来根据不同的字符进行不同的操作。当字符是‘0’、‘6’或者‘9’时,执行 count += 1 语句,意味着发现了一个含有一个圆圈的数字,将圆圈数量计数加 1;当字符为‘8’时,执行 count += 2 ,因为数字 8 含有两个圆圈,所以要给计数加 2;而对于 switch 语句中没有列出的其他字符情况,也就是其他数字,按照规则不需要进行任何对计数的操作,直接跳过即可。当整个循环结束,也就是遍历完整个字符串后,函数返回记录的圆圈总数 count 。
在 main 方法中,给出了几个不同输入字符串的测试样例,通过调用 solution 方法并对比输出结果与预期值是否一致,以此来验证代码的正确性,这样的测试方式有助于我们及时发现代码在处理不同输入情况时可能存在的逻辑问题,确保代码能准确地统计出任意给定数字字符串中圆圈的数量。
知识总结
通过刷这道题,我们收获了一些有价值的知识点以及更深层次的理解。
一方面,对字符的遍历与判断操作更加熟练了。在编程中,经常需要对字符串里的字符逐个进行分析处理,本题通过 toCharArray 方法将字符串转化为字符数组,再利用 for 循环和 switch 语句来判断每个字符的情况,这种操作方式是很常见且实用的。它让我们明白如何灵活地提取字符串中的单个字符,并依据不同的条件进行相应的逻辑处理,这在文本处理、数据验证等诸多场景中都有着广泛的应用。
另一方面,对于 switch 语句的运用有了更好的把握。switch 语句在根据不同的固定值进行不同分支操作时非常方便,它可以清晰地列出各种可能的情况以及对应的处理逻辑,相比于多个 if - else 语句,在某些情况下代码的可读性会更强。本题中,利用 switch 语句简洁明了地处理了不同数字字符对应圆圈数量的不同计算规则,让代码逻辑一目了然。
对于入门的同学,我的学习建议是,首先要扎实掌握字符串和字符相关的基础语法知识,比如字符串的创建、访问,字符的比较、转换等操作,多做一些简单的练习,如统计字符串中某个特定字符出现的次数等,加深对字符操作的熟悉程度。对于 switch 语句,要理解它的语法结构、执行流程以及适用场景,可以通过改写一些用 if - else 语句实现的简单逻辑为 switch 语句的方式,来体会两者的区别与优势,进而在实际编程中能够根据具体问题选择合适的语句来实现逻辑判断。
学习计划
结合刷题功能,以下是我总结的高效学习方法。
制定刷题计划
我们可以按照知识点和题型特点来制定刷题计划。对于像本题涉及的字符处理与逻辑判断这类基础的题目,可以先集中刷一批同类型的简单题目,例如统计字符串中元音字母的数量、判断字符串中是否存在特定字符等,巩固对字符操作和基本逻辑判断语句的运用能力。每周可以设定一个合理的刷题量,比如每周刷 10 - 12 道题,根据题目难度合理分配时间,确保每道题都能认真理解并掌握解题思路,循序渐进地提升自己的编程水平。随着能力的提升,再去挑战一些结合了更多知识点,如字符串与数组相互转换、复杂逻辑嵌套的综合性题目。