394. 字符串解码
题目:
思路:
【1】递归分解模拟的方式
思考如何分解:
如 3[a]2[bc]3[a2[c]]2[abc]3[cd]efabc3[cd]xyz
其中每个[]都是可以拆分的如
3[a] + 2[bc] + 3[a2[c]] + 2[abc] + 3[cd] + efabc + 3[cd] +xyz
那么 a 就会被传递到下一层,那么a就是新的入参
返回 a ,再根据数字 3 * a = aaa
其中比较复杂的就是3[a2[c]],
a2[c]作为第二层的入参
而c作为第三层的入参
所以这到题考虑出如何去除相对应匹配的[]里面的内容的时候就会变得很简单了
代码展示:
【1】递归分解模拟的方式
//时间0 ms 击败 100% //内存39.6 MB 击败 60.14% class Solution { public String decodeString(String s) { StringBuffer buf , res = new StringBuffer(); int i = 0 , countL = 0; char[] ch = s.toCharArray(); while (i < ch.length){ if (ch[i] >= 'a' && ch[i] <='z'){ res.append(ch[i]); }else { //如果不是字符那么必然是数字出身 int sum = 0; while (ch[i] >= '0' && ch[i] <= '9'){ sum = sum*10 + (ch[i] - '0'); i++; } // 取完数字后便要取出数字后面的括号内的字符串去递归 if (ch[i++] == '['){ countL = 1; buf = new StringBuffer(); while (countL > 0){ if (ch[i]== ']') countL--; if (countL == 0) break; buf.append(ch[i]); if (ch[i]== '[') countL++; i++; } // 递归解析[]内的东西,并且循环加入到结果集 String temp = decodeString(buf.toString()); while (sum-- > 0){ res.append(temp); } } } i++; } return res.toString(); } }