# 对于非负整数 X 而言，X 的数组形式是每位数字按从左到右的顺序形成的数组。例如，如果 X = 1231，那么其数组形式为 [1,2,3,1]。
#
# 给定非负整数 X 的数组形式 A，返回整数 X+K 的数组形式。
#
#  
#
# 示例 1：
#
# 输入：A = [1,2,0,0], K = 34
# 输出：[1,2,3,4]
# 解释：1200 + 34 = 1234
# 解释 2：
#
# 输入：A = [2,7,4], K = 181
# 输出：[4,5,5]
# 解释：274 + 181 = 455
# 示例 3：
#
# 输入：A = [2,1,5], K = 806
# 输出：[1,0,2,1]
# 解释：215 + 806 = 1021
# 示例 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
#  
#
# 提示：
#
# 1 <= A.length <= 10000
# 0 <= A[i] <= 9
# 0 <= K <= 10000
# 如果 A.length > 1，那么 A[0] != 0
#
# 来源：力扣（LeetCode）
# 链接：https://leetcode-cn.com/problems/add-to-array-form-of-integer
# 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
from typing import List

class Solution:
    def addToArrayForm(self, A: List[int], K: int) -> List[int]:
        B = list(map(int, list(str(K))))
        ans = []
        stack = []
        while A or B:
            n1 = A.pop(-1) if A else 0
            n2 = B.pop(-1) if B else 0
            stack.append(n1)
            stack.append(n2)
            s = sum(stack)
            ans.insert(0, s % 10)
            stack.clear()
            stack.append(s // 10)

        if stack[0] > 0:
            ans.insert(0, stack[0])
        return ans

if __name__ == '__main__':
    s = Solution()
    assert s.addToArrayForm([1, 2, 0, 0], 34) == [1, 2, 3, 4]
    assert s.addToArrayForm([2, 7, 4], 181) == [4, 5, 5]
    assert s.addToArrayForm([2, 1, 5], 806) == [1, 0, 2, 1]
    assert s.addToArrayForm([9, 9, 9, 9, 9, 9, 9, 9, 9, 9], 1) == [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]




