For a non-negative integer X, the array-form of X is an array of its digits in left to right order. For example, if X = 1231, then the array form is [1,2,3,1].
Given the array-form A of a non-negative integer X, return the array-form of the integer X+K.
Example 1:
Input: A = [1,2,0,0], K = 34
Output: [1,2,3,4]
Explanation: 1200 + 34 = 1234
Example 2:
Input: A = [2,7,4], K = 181
Output: [4,5,5]
Explanation: 274 + 181 = 455
Example 3:
Input: A = [2,1,5], K = 806
Output: [1,0,2,1]
Explanation: 215 + 806 = 1021
Example 4:
Input: A = [9,9,9,9,9,9,9,9,9,9], K = 1
Output: [1,0,0,0,0,0,0,0,0,0,0]
Explanation: 9999999999 + 1 = 10000000000
Note:
1 <= A.length <= 10000
0 <= A[i] <= 9
0 <= K <= 10000
If A.length > 1, then A[0] != 0
Ideas of solution
And when we do this, we should think about how to convert the Numbers in array A to the appropriate X.That is, by adding the values of X and K to a normal number, the final answer is converted into an array.So we just have to put in one bit at a time until we run out of digits to see if we can get a full X.Its time complexity is O(n), and the space complexity is O(n). The memory consumption is 6.3Mb.
Code
func addToArrayForm(A []int, K int) []int {
res:=[]int{}
for K>0{
res= append(res, K%10)
K/=10
}
for i:=0;i< len(res)/2;i++{
res[i],res[len(res)-1-i]=res[len(res)-1-i],res[i]
}
var short,long []int
if len(A)> len(res){
long,short=A,res
}else{
long,short=res,A
}
tmp:=0
ans:=make([]int, len(long))
for i:=len(short)-1;i>=0 ;i--{
v:=short[i]+long[i+len(long)-len(short)]+tmp
ans[i+len(long)-len(short)]=v%10
tmp=v/10
}
long=long[:len(long)-len(short)]
for i:=len(long)-1;i>=0 ;i--{
v:=long[i]+tmp
ans[i]=v%10
tmp=v/10
}
if tmp>0{
return append([]int{tmp},ans...)
}
return ans
}
链接:https://leetcode-cn.com/problems/add-to-array-form-of-integer/solution/go-by-richiezhu-20/
来源:力扣(LeetCode)