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(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)