力扣 leetcode 989. 数组形式的整数加法 (python)

Topic:

对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为 [1,2,3,1]。
给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。

Example_1:

输入:A = [1,2,0,0], K = 34
输出:[1,2,3,4]
解释:1200 + 34 = 1234

Example_2:

输入:A = [2,7,4], K = 181
输出:[4,5,5]
解释:274 + 181 = 455

Example_3:

输入:A = [2,1,5], K = 806
输出:[1,0,2,1]
解释:215 + 806 = 1021

Example_4:

输入:A = [9,9,9,9,9,9,9,9,9,9], K = 1
输出:[1,0,0,0,0,0,0,0,0,0,0]
解释:9999999999 + 1 = 10000000000

Solution_1:

按照不同的位数遍历列表A并输出
将A转换为数字
之后加上K的值并转换成列表的形式输出
运行效率低

Code_1:

class Solution:
    def addToArrayForm(self, A: List[int], K: int) -> List[int]:
        ans = 0
        n = len(A)
        for i in range(len(A)):
            ans += (A[n - i - 1] * 10 ** (i))
        
        ans += K
        res = list(str(ans))
        return res

Solution_2:

将原列表中的值逐位加入到空字符串中
并将字符串转换为整数的形式
最后同样是加上k
转换为列表后输出

Code_2:

class Solution:
    def addToArrayForm(self, A: List[int], K: int) -> List[int]:
        ans = int(''.join(str(i) for i in A))
        ans += K
        return(list(str(ans)))

Result_2:
力扣 leetcode 989. 数组形式的整数加法 (python)_第1张图片

Solution_3:

另一个思路参考了题解的第二个思路
在最低一位加上K
同时对将最后一个数量级上的数字放入此位
之后通过将K减去一个数量级和判断A中增加一个数量级的数字
重复以上过程
同时如果K的数量级比A大
则在A的左侧(更大的数量级上)放上一个零占位重复以上的过程
最后将上端队列A转换为列表输出

Code_3:

class Solution:
    def addToArrayForm(self, A: List[int], K: int) -> List[int]:
        i = len(A) - 1
        A = collections.deque(A)

        while K:
            A[i] += K
            K, A[i] = A[i] // 10, A[i] % 10
            i -= 1

            if i < 0 and K:
                A.appendleft(0)
                i = 0
        
        return list(A)

Result_3:
力扣 leetcode 989. 数组形式的整数加法 (python)_第2张图片

你可能感兴趣的:(python,leetcode,列表,字符串,python,leetcode,算法)