题目解析
在豆包 MarsCode AI 刷题题库中,我们选择了一道关于数组数字删除操作的题目进行解析。题目要求将一个长度为 n 的数组中的每个正整数通过逐步删除其各位数字的方式最终变为 0,并计算最少需要多少步。
思路分析
这个问题可以分解为每个数字如何通过删除各位数字最终变为 0。对于每个数字,我们可以从最高位开始逐位删除,每次删除一位都会使数字的长度减少一位。由于每次删除操作都会使数字变短,因此对于每个数字,删除所有位的操作次数等于该数字的位数。
例如,对于数字 103,其位数为 3,因此最少需要 3 步删除操作(删除 1、删除 0、删除 3)使其变为 0。
图解
假设我们有一个数组 a = [10, 13, 22, 100, 30],我们逐一分析每个数字的删除过程:
- 数字 10:位数为 2,需要 2 步(删除 1 和 删除 0)。
- 数字 13:位数为 2,需要 2 步(删除 1 和 删除 3)。
- 数字 22:位数为 2,需要 2 步(删除 2 和 删除 2)。
- 数字 100:位数为 3,需要 3 步(删除 1、删除 0、删除 0)。
- 数字 30:位数为 2,需要 2 步(删除 3 和 删除 0)。
总的删除步数为 2 + 2 + 2 + 3 + 2 = 11。
代码详解
我们提供了以下 Java 代码来实现上述思路:
public static int solution(int n, int[] a) {
int ans = 0;
for (int i = 0; i < a.length; i++) {
ans += delete(String.valueOf(a[i]));
}
return ans;
}
public static int delete(String temp) {
int count = 0;
var sb = new StringBuilder(temp);
while (sb.length() > 0) {
if (sb.charAt(0) != '0') {
count++;
}
sb.deleteCharAt(0);
}
return count;
}
solution方法遍历数组a,对每个数字调用delete方法计算删除步数,并累加到ans中。delete方法接收一个数字的字符串表示,逐位删除并计数删除操作的次数。
知识总结
在刷题过程中,我们学到了以下新知识点:
- 字符串操作:通过字符串操作可以方便地处理数字的各位数字。例如,使用
StringBuilder的deleteCharAt方法可以逐位删除数字。 - 位数计算:通过逐步删除数字的各位可以直观地计算出数字的位数,进而确定删除步数。
对于入门同学,建议从基础的数组和字符串操作开始练习,逐步掌握 Java 中的字符串操作方法,如 StringBuilder 和 String 的相关 API。
学习计划
为了高效地利用豆包 MarsCode AI 刷题功能,建议制定以下学习计划:
- 每日一题:每天选择一到两题进行练习,涵盖不同难度和类型的题目,确保知识的广度和深度。
- 错题回顾:定期回顾之前的错题,分析错误原因并进行针对性练习,避免重复犯错。
- 代码复盘:对完成的题目进行代码复盘,优化代码结构和逻辑,提高代码质量。
工具运用
为了达到更好的学习效果,建议将 AI 刷题功能与其他学习资源相结合:
- 查阅文档:在学习过程中遇到不熟悉的 API 或方法时,及时查阅 Java 官方文档,加深理解。
- 社区交流:参与技术社区或论坛,分享解题思路和经验,获取其他同学的反馈和建议。
- 结合实战:将刷题中学到的知识应用到实际项目中,通过实战巩固所学知识。
通过以上方法,可以更高效地利用豆包 MarsCode AI 刷题功能,提升编程能力。希望这些建议对其他入门同学有所帮助!