1. 小u数数
题目描述: 找到第 n 个偶数,并返回该偶数的第 k 个数字。
解题思路:
-
初始化变量:
current_number:当前偶数,初始为 0。current_length:当前偶数数字的长度,初始为 0。
-
循环遍历偶数:
-
将当前偶数转换为字符串,并计算其长度。
-
判断当前偶数字符串长度是否包含第 n 个字符。
- 如果包含,找到第 n 个字符,并返回其数字。
- 如果不包含,更新总长度,并将当前偶数加 2。
-
-
重复步骤 2,直到找到第 n 个偶数的第 k 个数字
```#include <iostream>
using namespace std;
int solution(int n) {
int current_number = 0;
int current_length = 0;
while (true) {
// 将当前偶数转换为字符串
string current_str = to_string(current_number);
int str_length = current_str.length();
// 判断当前字符串是否包含第 n 个字符
if (current_length + str_length >= n) {
// 找到第 n 个字符
int index_in_str = n - current_length - 1;
return current_str[index_in_str] - '0';
}
// 更新总长度
current_length += str_length;
// 生成下一个偶数
current_number += 2;
}
}
int main() {
cout << (solution(6) == 1) << endl;
cout << (solution(10) == 1) << endl;
cout << (solution(15) == 8) << endl;
return 0;
}
```js
AI 刷题思路:
- 优化循环条件: 可以使用数学公式直接计算第 n 个偶数的值,避免循环遍历。
- 使用位运算: 可以使用位运算符快速判断偶数,例如
current_number & 1 == 0
2. 小s的字符串解压缩
题目描述: 给定一个字符串 s 和一个整数 n,将 s 重复 n 次并按照特定规则解压缩,返回解压缩后的字符串。
解题思路:
-
初始化变量:
ans:解压缩后的字符串,初始为空。i:字符串 s 的索引,初始为 0。
-
遍历字符串 s:
-
判断当前字符是否为字母。
- 如果是字母,将其添加到结果字符串
ans中。 - 如果下一个字符是数字,读取完整的数字,并将前面的字母重复该数字次。
- 如果是字母,将其添加到结果字符串
-
如果当前字符不是字母,直接移动到下一个字符。
-
-
重复步骤 2,直到遍历完字符串 s
```#include <iostream>
#include <string>
using namespace std;
std::string solution(int n, const std::string& s) {
string ans;
for (int i = 0; i < n; ) {
char c = s[i];
// 如果是字母
if (isalpha(c)) {
ans += c; // 将字母添加到结果字符串
i++; // 移动到下一个字符
// 检查下一个字符是否是数字
if (i < n && isdigit(s[i])) {
int res = 0;
// 读取完整的数字
while (i < n && isdigit(s[i])) {
res = res * 10 + (s[i] - '0');
i++;
}
// 将前面的字符重复 res 次
ans.append(res - 1, c); // 因为已经添加了一次c,所以要减一
}
}
else {
i++; // 如果不是字母,直接移动到下一个字符
}
}
return ans;
}
int main() {
std::cout << (solution(9, "a2b3cde3f") == "aabbbcdeeef") << std::endl;
std::cout << (solution(10, "x44yz5mn51") == "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyzzzzzmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn") << std::endl;
std::cout << (solution(6, "adbc2d") == "adbccd") << std::endl;
return 0;
}
```js
AI 刷题思路:
- 使用状态机: 可以使用状态机来解析字符串 s,并根据当前状态进行不同的操作。
- 使用栈: 可以使用栈来存储未重复的字符和重复次数,从而简化代码逻辑。