大数求和--Python编写

用两个列表实现大数求和

知乎算法工程师面试题目,回来一查,发现类似LeetCode上的算法第415题。
原考题是说用列表实现两个大数求和,列表保存每个大数的每一位数字,返回结果列表。
LeetCode上的算法第415题题目描述:
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
注意:
num1 和num2 的长度都小于 5100.
num1 和num2 都只包含数字 0-9.
num1 和num2 都不包含任何前导零。
你不能使用任何內建 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)          

你可能感兴趣的:(在线编程,LeetCode)