小U数数 | 豆包MarsCode AI 刷题
小U正在数偶数,从 (0, 2, 4, 6, 8, 10, 12, \ldots) 开始,依次将这些数连在一起,形成一个无穷长的字符串,例如:"0246810121416..."。小U想知道这个字符串中的第 ( n ) 个字符是什么。本文将探讨如何帮助小U找到这个字符,并提供详细的代码实现。
问题描述
小U正在数偶数,从 (0, 2, 4, 6, 8, 10, 12, \ldots) 开始,依次将这些数连在一起,形成一个无穷长的字符串。目标是帮助小U找到这个字符串中的第 ( n ) 个字符。
解决方案
为了帮助小U找到字符串中的第 ( n ) 个字符,我们可以分以下几个步骤来实现:
- 初始化变量:
num:当前的偶数,初始值为0。len:当前字符串的长度,初始值为0。
- 构建字符串:
- 使用一个循环,依次将每个偶数转换为字符串,并累加其长度。
- 当累加的长度超过或等于 ( n ) 时,停止循环。
- 确定目标字符:
- 由于循环停止时,
num已经加了2,需要减去2以恢复到正确的偶数。 - 计算目标字符在当前偶数字符串中的位置,并返回该字符。
- 由于循环停止时,
代码实现
public class Main {
public static int solution(int n) {
int num = 0;
int len = 0;
// 构建字符串,直到长度超过或等于 n
while (len < n) {
String s = String.valueOf(num);
len += s.length();
num += 2;
}
// 恢复到正确的偶数
num -= 2;
// 计算目标字符在当前偶数字符串中的位置
String s = String.valueOf(num);
int index = n - (len - s.length()) - 1;
// 返回目标字符
return s.charAt(index) - '0';
}
public static void main(String[] args) {
// 测试样例
System.out.println(solution(6) == 1); // 输出:true
System.out.println(solution(10) == 1); // 输出:true
System.out.println(solution(15) == 8); // 输出:true
}
}
代码解释
- 初始化变量:
num:当前的偶数,初始值为0。len:当前字符串的长度,初始值为0。
- 构建字符串:
- 使用一个
while循环,依次将每个偶数转换为字符串s,并累加其长度len。 - 每次循环,
num增加2。 - 当
len超过或等于n时,停止循环。
- 使用一个
- 确定目标字符:
- 由于循环停止时,
num已经加了2,需要减去2以恢复到正确的偶数。 - 计算目标字符在当前偶数字符串中的位置
index,即n - (len - s.length()) - 1。 - 返回目标字符
s.charAt(index) - '0',将字符转换为整数。
- 由于循环停止时,
测试样例
- 样例1:
n = 6,输出:1- 解释:字符串 "0246810121416..." 中的第6个字符是 '1'。
- 样例2:
n = 10,输出:1- 解释:字符串 "0246810121416..." 中的第10个字符是 '1'。
- 样例3:
n = 15,输出:8- 解释:字符串 "0246810121416..." 中的第15个字符是 '8'。 通过上述方法,我们可以有效地帮助小U找到字符串中的第 ( n ) 个字符,确保在构建字符串的过程中,准确地定位到目标字符。