【題目】
給定乙個字串s,求其中全部數字串所代表的數字之和。
【要求】
忽略小數點字元,例如"a1.3",其中包含兩個數字1和3。
如果緊貼數字子串的左側出現字元』-』』,當連續出現的數量為奇數時,則數字視為負,連續出現的數量為偶數時,則數字視為正。例如,「a-1bc–12」,其中包含數字為-1和12。
【舉例】
s=「a1.3」,返回4。
s=「a-1bc–12」,返回11。
s=「a1cd2e33」,返回36。
s=「a-1b–2c–d6e」,返回7。
考慮邏輯分析能力和邊界處理問題。
數字子串全為整數;
偶數個』-『為正,奇數個』-'為負;
其他字元無特殊含義
res
記錄求和結果,num
記錄當前整數,flag
記錄其符號
遍歷字串s
,數字字元出現時記錄當前數至num
,非數字字元出現時累加當前數至res
,根據』-'的個數記錄num
的符號
最後乙個字元可能是數字,此時剛記錄完num
,需再次將num
結果累計至res
,防止遺漏。
時間複雜度為o(n
)o(n)
o(n)
,空間複雜度為o(1
)o(1)
o(1)
# 數字子串求和
defsum_sub_num_str
(s):
res =
0# 求和結果
num =
0# 當前值
flag =
true
# 當前值符號
for i in
range
(len
(s))
: c = s[i]
if c >=
'0'and c <=
'9':
num = num *10+
ord(c)
-ord
('0'
)else
:if flag is
false
: num =
-num
res += num
num =
0if c ==
'-':
if i -
1>=
0and s[i -1]
=='-'
: flag =
true
else
: flag =
false
else
: flag =
true
if flag is
false
: num =
-num
res += num
return res
# 簡單測試
if __name__ ==
'__main__'
:print
(sum_sub_num_str(
"a1.3"))
# 4print
(sum_sub_num_str(
"a-1bc--12"))
# 11
print
(sum_sub_num_str(
"a1cd2e33"))
# 36
print
(sum_sub_num_str(
"a-1b--2c--d6e"))
# 7
字串 字串中數字子串的求和
題目 給定乙個字串str,求其中全部數字串所代表的數字之和。要求如下 忽略小數點字元,例如 a1.3 其中包含兩個數字1和3.如果緊貼數字子串的左側出現字元 當連續出現的數量為奇數時,則數字視為負,連續出現的數量為偶數時,則數字視為正。例如,a 1bc 12 其中包含數字 1和12。舉例 str a...
字串中數字子串的求和
題目 給定乙個字串str,求其中全部數字串所代表的數字之和。要求 忽略小數點字元,如 a1.3 其中包含兩個數字1和3 如果緊貼數字子川的左側出現字元 當連續出現的數量為奇數時,則數字視為負,偶數時,則數字視為正。如 a 1bc 12 其中包含數字為 1和12。舉例 str a1cd2e33 返回3...
字串中數字子串求和問題
輸入 ab34c57ddo 輸出 91 輸入 1ab 2c78 輸出 79 說明 奇數個 表示負號,偶數個 表示正號 下面這個思路又麻煩又複雜,還只能實現正號的操作,愚蠢至極,記錄一下豈不也快哉 下面這個方法將字串遍歷一次,將找到連續的數字字串存放到vectorsub中,然後再將所有的sub存放到v...