大数求和--Python編纂


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が加算.キャリー後に配列長の範囲を超えた場合は、挿入操作を使用します.
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)