算法 -- 字符串中数字字串的和

这个算法题目是, 在一个包含数字的字符串中,求其中数字字串的和。 

例如:a1cd2e33,返回36。  a1cd2e345  返回 348

这个题目可以看出,它的难点在于几个数字连在一起的情况,因为如果数字都是字母隔开,比如a1b2c3d8  这种就很简单,只需要循环判断每一个字符,只要是 '0'到'9'之间,相加就可以

但现在有数字连在一起的情况,比如 a2b55  你必须把55当成是一个数字,而不能5+5=10

这里就有一个算法我们要拆分理解

1位数  3 = 0 * 10 + 3

2位数   34 =  3* 10  + 4

3位数  345 = 34 * 10 + 5 = 3 * 10 * 10 + 4 * 10 + 5

 这个逻辑看出来了么,也就是说代码逻辑如下

var checkSum = 0

for(循环字符,如果字符c是数字)

{

      checkSum = checkSum * 10 + (c - '0');  // (c - '0') 是把字符c转换为数字的快速写法

}

所以,代码如下

public class Solution
{
    public int GetSumInString(string str)
    {
       var sum  = 0;
       var currentSum = 0;

       // 遍历每一个字符
       foreach(var c in str)
        {
            // 判断是否是数字
            if(c >= '0' && c <= '9')
            {
                // 把之前的值*10 + 当前数字,拼接连续数字
                currentSum = currentSum * 10 + (c - '0');
            }
            else
            {
                // 遇到非数字:把当前累计数字加到总和,重置currentNum
                sum += currentSum;
                currentSum = 0;
            }
        }

        // 【重要】循环结束后,最后一段数字还没加进去
        sum += currentNum;
       return sum;
    }
}

 

posted on 2026-09-27 12:58  新西兰程序员  阅读(1)  评论(0)    收藏  举报