字符串中数字子串的求和
给定一个字符串str,求其中全部数字串所代表的数字之和
1. 忽略小数点,“ A1.3 ” 表示的数字就是包含两个数字 1 和 3
2. 紧贴数字的左边出现 “-”,其连续出现的数量如果为奇数,就视为 负,如果为偶数,就视为 正 “ A-1BC--23” 表示的是 -1 和 23
【解题思路】
首先定义三个变量, res表示目前的累加和,num表示当前收集到的数字,布尔型变量flag表示将num加到res中,num是正还是负,具体可以看代码中的注释。
可以做到时间复杂度是O(N),空间复杂度是O(1)
package com.test; /** * Created by Demrystv. */ public class SumOfSubNumArr { /* 时间复杂度是O(N),空间复杂度是O(1) 首先定义三个变量, res表示目前的累加和,num表示当前收集到的数字,布尔型变量flag表示将num加到res中,num是正还是负 */ public int sumOfSubNumArr(String str){ if (str == null || str.length() == 0){ return 0; } char[] chars = str.toCharArray(); int res = 0; int num = 0; boolean flag = true; int cur = 0; for (int i = 0; i < chars.length; i++) { cur = chars[i] - '0'; //如果不是在数字0到9 之间 if (cur < 0 || cur > 9){ res += num; num = 0; //用完之后应置为0 //不在0到9之间,同时等于“-” if (chars[i] == '-'){ if (i - 1 > -1 && chars[i - 1] == '-'){ flag = !flag; }else { flag = false; } }else { flag = true; } }else { // 在0和9之间 num = num * 10 + (flag ? cur : -cur); } } res += num; return res; } }