算法 -- 字符串中数字字串的和
这个算法题目是, 在一个包含数字的字符串中,求其中数字字串的和。
例如: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; } }
浙公网安备 33010602011771号