力扣(LeetCode)整数形式的整数加法 个人题解
对于非负整数 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
这题做法的思路是比较简单的,逐位相加,记得设置进位,从右到左最后得到结果。
我这里使用了原地的vector来做,所以内存使用上比较少,但是逻辑判断就比较麻烦一些了。如果K的位数大于数组的位数还得再进行处理。
代码如下:
class Solution { public: vector<int> addToArrayForm(vector<int>& A, int K) { int cf=0; for(int i=A.size()-1; i>=0; i--) { int tmp=K%10; int newnum = tmp+A[i]+cf; if(newnum >= 10) { newnum-=10; cf=1; } else { cf=0; } A[i]= newnum; K/=10; } while (K!=0) { A.insert(A.begin(),K+cf); cf = (K+cf)/10; K/=10; } if (cf!=0) A.insert(A.begin(),cf); return A; } };
多说一句,题解区有更巧的方法,但是思路本质是一样的 戳->https://leetcode-cn.com/problems/add-to-array-form-of-integer/solution/shu-zu-xing-shi-de-zheng-shu-jia-fa-by-leetcode/