问题描述
小U正在数偶数,从 0,2,4,6,8,10,12,…0,2,4,6,8,10,12,… 开始,依次将这些数连在一起,形成一个无穷长的字符串,例如:"0246810121416..."。小U想知道这个字符串中的第 nn 个字符是什么。
测试样例
样例1:
输入:
n = 6
输出:1
样例2:
输入:
n = 10
输出:1
样例3:
输入:
n = 15
输出:8
解题思路
- 生成偶数序列:从
0开始,依次生成偶数。 - 构建字符串:将这些偶数转换为字符串并连接起来。
- 查找第
n个字符:在构建的字符串中找到第n个字符。
代码提示
我们可以通过以下步骤来实现这个逻辑:
- 生成偶数:使用一个循环来生成偶数,直到生成的字符串长度超过
n。 - 转换为字符串:将每个生成的偶数转换为字符串并连接起来。
- 查找字符:在最终的字符串中找到第
n个字符。
具体步骤
-
生成序列:
- 使用循环或递归生成序列。
- 对于偶数序列,可以从
0开始,每次增加2。
-
构建字符串:
- 将生成的序列中的每个数字转换为字符串,并连接起来。
- 使用字符串拼接操作(如
+=)来构建最终的字符串。
-
查找目标字符:
- 在生成的字符串中,找到目标位置的字符。
- 注意字符串索引从
0开始,所以目标位置的字符索引是n-1。
代码实现
#include <iostream>
#include <string>
using namespace std;
int solution(int n) {
string result = "";
int num = 0;
// 生成偶数并连接成字符串
while (result.length() < n) {
result += to_string(num);
num += 2;
}
// 返回第 n 个字符
return result[n - 1] - '0'; // 注意:字符串索引从 0 开始
}
int main() {
cout << (solution(6) == 1) << endl;
cout << (solution(10) == 1) << endl;
cout << (solution(15) == 8) << endl;
return 0;
}
关键步骤解释
-
生成偶数并连接成字符串:
- 使用
while循环,直到result字符串的长度超过n。 - 每次循环中,将当前的偶数
num转换为字符串并追加到result中。 - 然后将
num增加 2,以生成下一个偶数。
- 使用
-
返回第
n个字符:- 由于字符串索引从 0 开始,所以第
n个字符的索引是n-1。 - 将字符转换为数字并返回。
- 由于字符串索引从 0 开始,所以第
总结
- 生成偶数序列:通过循环生成偶数。
- 构建字符串:将生成的偶数转换为字符串并连接。
- 查找第
n个字符:在最终的字符串中找到第n个字符并返回。