字串 字串中數字子串的求和

2021-08-21 15:51:12 字數 1532 閱讀 7284

【題目】

給定乙個字串str,求其中全部數字串所代表的數字之和。要求如下:

忽略小數點字元,例如「a1.3」,其中包含兩個數字1和3.

如果緊貼數字子串的左側出現字元「-」,當連續出現的數量為奇數時,則數字視為負,連續出現的數量為偶數時,則數字視為正。例如,「a-1bc- -12」,其中包含數字-1和12。

【舉例】

str = 「a1cd2e33」返回36. 

str = 「a-1b- -2c- -d6e」,返回7。

【基本思路】

使用三個變數。res,num和posi。res表示目前的累加和,num表示當前收集到的數字,posi表示數字num是正數還是負數,true表示正數,初始時res = 0, num = 0, posi = true。

從左到右依次遍歷字串,假設遍歷到的字元為char。情況分析如下:

1)如果char是 『0』 ~ 『9』,假設之前收集的數字為num,則可以根據posi更新num的值,如果posi == true,則num = num×10 + (char - 『0』),否則num = num×10 - (char - 『0』)。posi的更新方法之後解釋。

2)如果char不是 『0』 ~ 『9』,則說明num已經是乙個完整的數字了,該累加到res了,所以res += num,然後令num = 0。累加完後觀察此時char的值,如果此時的字元不是「-」,則令posi = true,如果此時的字元為「-」,判斷前乙個字元是否也是「-」,如果是的話,令 posi = !posi,否則令posi = false。

既然我們把累加的時機放在了char不是數字字元的時候,那麼如果str是以數字字元結尾的,那麼就會出現最後乙個字元沒有累加的情況。所以遍歷完成後,還要再加一次num。

時間複雜度o(n),空間複雜度o(1)

def numsum(str1):

if str1 == none or len(str1) == 0:

return flase

res = 0 #總和

num = 0 #當前值

cur = 0 #當前字元

posi = ture

for i in range(len(str1)):

cur = ord(str(i)) - ord('0')

if cur < '0' or cur > '9':

res += num

num = 0

if str1[i] = '-':

if i-1 >= 0 and str1[i-1] == '-':

posi = not posi

else:

posi = flase

else:

posi = ture

else:

num = num *10 + cur if posi else -cur #posi為ture時取cur,否則取-cur

res += num

return res

字串中數字子串求和

題目 給定乙個字串s,求其中全部數字串所代表的數字之和。要求 忽略小數點字元,例如 a1.3 其中包含兩個數字1和3。如果緊貼數字子串的左側出現字元 當連續出現的數量為奇數時,則數字視為負,連續出現的數量為偶數時,則數字視為正。例如,a 1bc 12 其中包含數字為 1和12。舉例 s a1.3 返...

字串中數字子串的求和

題目 給定乙個字串str,求其中全部數字串所代表的數字之和。要求 忽略小數點字元,如 a1.3 其中包含兩個數字1和3 如果緊貼數字子川的左側出現字元 當連續出現的數量為奇數時,則數字視為負,偶數時,則數字視為正。如 a 1bc 12 其中包含數字為 1和12。舉例 str a1cd2e33 返回3...

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

題目 給定乙個字串str,求其中全部數字串所代表的數字之和。要求如下 忽略小數點字元,例如 a1.3 其中包含兩個數字1和3.如果緊貼數字子串的左側出現字元 當連續出現的數量為奇數時,則數字視為負,連續出現的數量為偶數時,則數字視為正。例如,a 1bc 12 其中包含數字 1和12。舉例 str a...