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;
}