P1928 外星密码
P1928 外星密码
一道经典递归题(但我没想出来)
问题
题目给的是一行的字符串。
我一开始想直接对字符串进行处理,但发现非常麻烦,因为要对字符串做拆分,而且很难对括号[]做对应,也对数字字符整体判断麻烦,总体实现起来繁琐复杂。
正确思路
将字符串拆成每个字符,再读入,对每个读入判断,以读取到'['为开始做递归。(括号内的格式是相同的,所以可以用相同判断形式)
优点
字符读入判断非常简单,且再读入数字时可以直接读入整体数字。
将每个括号中递归可以减少代码量。
#include <iostream>
#include <string>
#include <algorithm>
#include <cmath>
#define ll long long
using namespace std;
string expand() {
string s = "", n;
int m;
char a;
while (cin >> a) {
if (a == '[') {
cin >> m;
n = expand();
for (int i = 1; i <= m; i++) {
s += n;
}
} else if (a == ']') {
return s;
} else {
s += a;
}
}
return s;
}
int main() {
cout << expand();
return 0;
}
合集:
洛谷递归与递推
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?