大数求和--Python編纂
4518 ワード
2つのリストで大数の和を実現
アルゴリズムエンジニアの面接問題を知っていて、帰って調べてみると、LeetCodeのようなアルゴリズム415問題が見つかりました.元の問題はリストで2つの大数の和を実現し、リストは大数の各数字を保存し、結果リストを返すということです.LeetCodeの上のアルゴリズムの第415題の題目の説明:2つの文字列の形式の非負の整数num 1とnum 2を与えて、それらの和を計算します.注意:num 1とnum 2の長さはいずれも5100未満である.num 1とnum 2はいずれも数字0-9のみを含む.num 1およびnum 2には、プリアンブルゼロは含まれません.ビルドされたBigIntegerライブラリを使用することはできません.入力した文字列を直接整数に変換することはできません.LeetCodeアドレス:https://leetcode-cn.com/problems/add-strings/description/解題構想:加算演算に類似し、キャリーを考慮する.新しい配列を作成します.配列の長さは長い配列と一致し、配列の後の一部は短い配列の値を保存し、残りの部分はすべて0で、その後、この新しい配列を利用して元の長い配列と加算演算を行います.配列の末尾から加算、合計値が10より大きい場合は、ビット数のみが保持され、配列の上位に1が加算.キャリー後に配列長の範囲を超えた場合は、挿入操作を使用します.
アルゴリズムエンジニアの面接問題を知っていて、帰って調べてみると、LeetCodeのようなアルゴリズム415問題が見つかりました.元の問題はリストで2つの大数の和を実現し、リストは大数の各数字を保存し、結果リストを返すということです.LeetCodeの上のアルゴリズムの第415題の題目の説明:2つの文字列の形式の非負の整数num 1とnum 2を与えて、それらの和を計算します.注意:num 1とnum 2の長さはいずれも5100未満である.num 1とnum 2はいずれも数字0-9のみを含む.num 1およびnum 2には、プリアンブルゼロは含まれません.ビルドされたBigIntegerライブラリを使用することはできません.入力した文字列を直接整数に変換することはできません.LeetCodeアドレス:https://leetcode-cn.com/problems/add-strings/description/解題構想:加算演算に類似し、キャリーを考慮する.新しい配列を作成します.配列の長さは長い配列と一致し、配列の後の一部は短い配列の値を保存し、残りの部分はすべて0で、その後、この新しい配列を利用して元の長い配列と加算演算を行います.配列の末尾から加算、合計値が10より大きい場合は、ビット数のみが保持され、配列の上位に1が加算.キャリー後に配列長の範囲を超えた場合は、挿入操作を使用します.
def Sumab(array1,array2):
len1 = len(array1)
len2 = len(array2)
if len1 <= len2:# , : 1 2 , 。
minlen = len1#
maxlen = len2
ans = [0 for x in range(maxlen)]#
ans = [0 for x in range(maxlen)]# 0
ans[-minlen:] = array1#
#print ans
for i in range(1,maxlen+1):
i = -i#
temp = ans[i] + array2[i]
if temp >= 10:# 10, ,
temp = temp - 10
ans[i] = temp
print ans
if i == -maxlen: # , , python insert ,
ans.insert(0,1)
else:# , 1
ans[i-1] = ans[i-1] + 1
else:
ans[i] = temp
#print ans
else:#
minlen = len2
maxlen = len1
ans = [0 for x in range(maxlen)]
ans[-minlen:] = array2
for i in range(1,maxlen+1):
i = -i
temp = ans[i] + array1[i]
if temp >= 10:
temp = temp - 10
ans[i] = temp
if i == -maxlen:
ans.insert(0,1)
else:
ans[i-1] = ans[i-1] + 1
else:
ans[i] = temp
return ans
#
array1 = [9,9,9,9,9,9]
array2 = [9,9,9]
print Sumab(array1,array2)