Solution of Add to Array-Form of Integer

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值