求助:用C#递归实现支持多位数重复次数的complex_decode函数
解决方案
要支持多位数重复次数的解码,核心是递归解析字符后的连续数字序列,再基于解析出的次数重复字符,最后递归处理剩余字符串。以下是符合要求的实现:
完整代码
public string complex_decode(string str) { if (string.IsNullOrEmpty(str)) return ""; // 取出当前要重复的字符 char currentChar = str[0]; // 解析字符后的连续数字,得到重复次数和剩余未处理的字符串 var (repeatCount, remainingStr) = ParseConsecutiveDigits(str.Substring(1)); // 生成重复字符 + 递归处理剩余字符串 return RepeatChar(currentChar, repeatCount) + complex_decode(remainingStr); } // 辅助函数:递归解析连续数字,返回(重复次数, 剩余字符串) private (int count, string remaining) ParseConsecutiveDigits(string str) { return ParseDigitsHelper(str, 0); } // 递归解析数字的核心逻辑:累计当前数字值 private (int count, string remaining) ParseDigitsHelper(string str, int currentCount) { if (string.IsNullOrEmpty(str)) return (currentCount, ""); char c = str[0]; // 遇到非数字字符,停止解析,返回当前累计的次数和剩余字符串 if (!char.IsDigit(c)) return (currentCount, str); // 累计数字值:当前值 = 之前累计值 * 10 + 当前数字的整数值 int newCount = currentCount * 10 + CharToInt(c); // 递归处理下一个字符 return ParseDigitsHelper(str.Substring(1), newCount); } // 字符转数字(优化可读性) public int CharToInt(char c) { return (int)(c - '0'); } // 递归生成重复字符(原逻辑保留) public string RepeatChar(char c, int n) { if (n < 1) return ""; if (n == 1) return c.ToString(); return c + RepeatChar(c, n - 1); }
关键逻辑说明
主函数
complex_decode:- 空字符串直接返回空;
- 取出第一个字符后,调用辅助函数解析后续的连续数字;
- 生成重复字符后,递归处理数字之后的剩余字符串。
数字解析辅助函数:
- 通过
ParseDigitsHelper递归累计数字值,比如解析"12"时,先累计1,再计算1*10+2=12; - 遇到非数字字符时立即停止,返回累计的次数和剩余未处理的字符串。
- 通过
原函数复用:保留了递归生成重复字符的
RepeatChar,仅优化了CharToInt的可读性。
测试验证
- 输入
"t11h12e14",返回"ttttttttttthhhhhhhhhhhheeeeeeeeeeeeee"; - 输入
"a5",返回"aaaaa"; - 输入
"t1h1e1",返回"the",完全兼容原逻辑的场景。
内容的提问来源于stack exchange,提问作者MakaveliN1
相关产品推荐
相关产品推荐

