You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:用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);
}

关键逻辑说明

  1. 主函数complex_decode:

    • 空字符串直接返回空;
    • 取出第一个字符后,调用辅助函数解析后续的连续数字;
    • 生成重复字符后,递归处理数字之后的剩余字符串。
  2. 数字解析辅助函数:

    • 通过ParseDigitsHelper递归累计数字值,比如解析"12"时,先累计1,再计算1*10+2=12;
    • 遇到非数字字符时立即停止,返回累计的次数和剩余未处理的字符串。
  3. 原函数复用:保留了递归生成重复字符的RepeatChar,仅优化了CharToInt的可读性。

测试验证

  • 输入"t11h12e14",返回"ttttttttttthhhhhhhhhhhheeeeeeeeeeeeee";
  • 输入"a5",返回"aaaaa";
  • 输入"t1h1e1",返回"the",完全兼容原逻辑的场景。

内容的提问来源于stack exchange,提问作者MakaveliN1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 12:15:32