給定兩個字串形式的非負整數 num1 和num2 ,計算它們的和。
注意:
num1 和num2 的長度都小於 5100.
num1 和num2 都只包含數字 0-9.
num1 和num2 都不包含任何前導零。
你不能使用任何內建 biginteger 庫, 也不能直接將輸入的字串轉換為整數形式。
感覺對python來說這種加法沒有意義,本身就能處理高精度問題,但還是寫一寫吧,引用一下之前寫的c++高精度加法的內容:
輸入兩個數到兩個變數中,然後用賦值語句求它們的和,輸出。但是,我們知道,在c++語言中任何資料型別都有一定的表示範圍。當兩個被加數很大時,上述演算法顯然不能求出精確解,因此我們需要尋求另外一種方法。在讀小學時,我們做加法都採用豎式方法,這樣我們方便寫出兩個整數相加的演算法。
an……a3 a2 a1
bn……b3 b2 b1
+————————
cn……c3 c2 c1
class
solution
:def
addstrings
(self, num1:
str, num2:
str)
->
str:
ans, len1, len2, carry ='',
len(num1)-1
,len
(num2)-1
,0while len1 >=
0and len2 >=0:
ans +=
str(((
int(num1[len1])+
int(num2[len2]
)+ carry)%10
))carry =
(int
(num1[len1])+
int(num2[len2]
)+ carry)
//10
len1 -=
1 len2 -=
1while len1 >=0:
ans +=
str(
(int
(num1[len1]
)+ carry)%10
) carry =
(int
(num1[len1]
)+ carry)
//10
len1 -=
1while len2 >=0:
ans +=
str(
(int
(num2[len2]
)+ carry)%10
) carry =
(int
(num2[len2]
)+ carry)
//10
len2 -=
1if carry:
ans +=
str(carry)
return ans[::
-1]
時間複雜度:o(max(len1,len2)),其中 len1=num1.length,len2=num2.length。豎式加法的次數取決於較大數的位數。
空間複雜度:o(1)。除答案外我們只需要常數空間存放若干變數。
LeetCode 字串相加 415
給定兩個字串形式的非負整數 num1 和num2 計算它們的和。注意 num1 和num2 的長度都小於 5100.num1 和num2 都只包含數字 0 9.num1 和num2 都不包含任何前導零。你不能使用任何內建 biginteger 庫,也不能直接將輸入的字串轉換為整數形式。思路 先將字串...
415 字串相加
設定 i,j 兩指標分別指向 num1,num2 尾部,模擬人工加法 計算進製 計算 carry tmp 10,代表當前位相加是否產生進製 新增當前位 計算 tmp n1 n2 carry,並將當前位 tmp 10 新增至 res 頭部 索引溢位處理 當指標 i或j 走過數字首部後,給 n1,n2 ...
415 字串相加
題目描述 給定兩個字串形式的非負整數 num1 和num2 計算它們的和。注意 num1 和num2 的長度都小於 5100.num1 和num2 都只包含數字 0 9.num1 和num2 都不包含任何前導零。你不能使用任何內建 biginteger 庫,也不能直接將輸入的字串轉換為整數形式。方法...