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

求数字字符串连续相同数字迭代求和函数的递归实现方案

实现连续相同数字求和直到无连续重复的方法

需求回顾

实现方法 String consecutiveSum(String number):接收数字字符串,将所有连续相同的数字替换为它们的和,重复此过程直到字符串中不存在连续相同数字。比如输入 "144404331",处理流程是:
"144404331" → "1120461"(合并3个4为12,2个3为6)→ "220461"(合并2个1为2)→ "40461"(合并2个2为4),最终返回 "40461"。

方案1:递归实现

思路直观:先完成一轮连续相同数字的合并,得到新字符串。如果新字符串和原字符串完全一致,说明没有可合并的内容,直接返回;否则递归调用方法处理新字符串。

public String consecutiveSum(String number) {
    // 先完成一轮连续相同数字的合并操作
    StringBuilder sb = new StringBuilder();
    int n = number.length();
    if (n == 0) return "";
    
    char current = number.charAt(0);
    int count = 1;
    
    for (int i = 1; i < n; i++) {
        if (number.charAt(i) == current) {
            count++;
        } else {
            // 计算当前连续数字的和,转为字符串追加
            int sum = Character.getNumericValue(current) * count;
            sb.append(sum);
            current = number.charAt(i);
            count = 1;
        }
    }
    // 处理最后一组连续数字
    int sum = Character.getNumericValue(current) * count;
    sb.append(sum);
    
    String result = sb.toString();
    // 终止条件:处理后无变化则返回,否则递归继续处理
    return result.equals(number) ? result : consecutiveSum(result);
}

方案2:迭代实现(避免递归栈溢出)

如果输入字符串极端长,递归可能触发栈溢出,迭代方案更稳妥。核心逻辑和递归一致,用循环代替递归,直到某次处理后的字符串和处理前完全相同为止。

public String consecutiveSum(String number) {
    String currentStr = number;
    while (true) {
        StringBuilder sb = new StringBuilder();
        int len = currentStr.length();
        if (len == 0) return "";
        
        char currentChar = currentStr.charAt(0);
        int count = 1;
        
        for (int i = 1; i < len; i++) {
            if (currentStr.charAt(i) == currentChar) {
                count++;
            } else {
                sb.append(Character.getNumericValue(currentChar) * count);
                currentChar = currentStr.charAt(i);
                count = 1;
            }
        }
        // 处理最后一组连续数字
        sb.append(Character.getNumericValue(currentChar) * count);
        
        String nextStr = sb.toString();
        if (nextStr.equals(currentStr)) {
            return nextStr;
        }
        currentStr = nextStr;
    }
}

关键细节说明

  • 合并时要将连续数字的和转为完整字符串追加(比如3个4的和是12,需追加"12"而非单个数字)
  • 必须以「处理前后字符串完全一致」作为终止条件,否则会遗漏后续产生的连续重复(比如示例中第一次处理后出现的连续1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:50:33