1. 程式人生 > >字符串問題----字符串中數字子串的求和

字符串問題----字符串中數字子串的求和

變量 lean col 數字 span bnu 空間復雜度 數字串 bool

字符串中數字子串的求和

  

  給定一個字符串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; } }

字符串問題----字符串中數字子串的求和