class Solution {
public:
string decodeString(string s)
{
int i = 0;
return dfs(s, i);
}
string dfs(string& s, int& i)
{
string cur;
int n = 0;
while (i < s.size())
{
if (s[i] >= '0' && s[i] <= '9') n = n * 10 + s[i] - '0';
else if ('[' == s[i])
{
i++;
string t = dfs(s, i);
while (n) cur += t, n--;
n = 0;
}
else if (']' == s[i]) return cur;
else cur += s[i];
++i;
}
return cur;
}
};