题目

标题和出处

标题:数组形式的整数加法

出处:989. 数组形式的整数加法

难度

3 级

题目描述

要求

整数 数组题目:数组形式的整数加法 - 图1 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 数组题目:数组形式的整数加法 - 图2,那么其数组形式为 数组题目:数组形式的整数加法 - 图3

给定一个整数的数组形式 数组题目:数组形式的整数加法 - 图4 和一个整数 数组题目:数组形式的整数加法 - 图5,返回整数 数组题目:数组形式的整数加法 - 图6 的数组形式。

示例

示例 1:

输入:数组题目:数组形式的整数加法 - 图7
输出:数组题目:数组形式的整数加法 - 图8
解释:数组题目:数组形式的整数加法 - 图9

示例 2:

输入:数组题目:数组形式的整数加法 - 图10
输出:数组题目:数组形式的整数加法 - 图11
解释:数组题目:数组形式的整数加法 - 图12

示例 3:

输入:数组题目:数组形式的整数加法 - 图13
输出:数组题目:数组形式的整数加法 - 图14
解释:数组题目:数组形式的整数加法 - 图15

示例 4:

输入:数组题目:数组形式的整数加法 - 图16
输出:数组题目:数组形式的整数加法 - 图17
解释:数组题目:数组形式的整数加法 - 图18

数据范围

  • 数组题目:数组形式的整数加法 - 图19
  • 数组题目:数组形式的整数加法 - 图20
  • 除了整数 数组题目:数组形式的整数加法 - 图21 之外,数组题目:数组形式的整数加法 - 图22 不会以零开头
  • 数组题目:数组形式的整数加法 - 图23

解法

思路和算法

这道题是「加一」的一般化情况,把「加 数组题目:数组形式的整数加法 - 图24」换成了「加 数组题目:数组形式的整数加法 - 图25」。这道题同样可以通过模拟加法过程的方法得到结果。

首先将数组 数组题目:数组形式的整数加法 - 图26 的右边第一位加 数组题目:数组形式的整数加法 - 图27,如果在更新之后,第一位大于 数组题目:数组形式的整数加法 - 图28,则产生进位,将进位加到第二位,第一位保留个位。如果在进位操作之后,第二位大于 数组题目:数组形式的整数加法 - 图29,则继续处理进位。在该过程中,使用动态数组存储数组 数组题目:数组形式的整数加法 - 图30 的从低到高的每一位,除了最高位。

数组 数组题目:数组形式的整数加法 - 图31 的最高位可能大于 数组题目:数组形式的整数加法 - 图32,因此需要将最高位的每一个数位按照从低到高的顺序添加到动态数组中。需要注意的是,由于数组 数组题目:数组形式的整数加法 - 图33 表示的数字和 数组题目:数组形式的整数加法 - 图34 都可能是 数组题目:数组形式的整数加法 - 图35,因此当数组 数组题目:数组形式的整数加法 - 图36 的最高位是 数组题目:数组形式的整数加法 - 图37 时,也需要被添加到动态数组中。

对数组 数组题目:数组形式的整数加法 - 图38 的最高位处理结束后,此时动态数组中的元素是结果的每一位,每个元素都是一位数,元素按照从最低位到最高位的顺序排列。将动态数组中的元素进行反转,即可得到最终结果。

代码

  1. class Solution {
  2. public List<Integer> addToArrayForm(int[] num, int k) {
  3. List<Integer> sum = new ArrayList<Integer>();
  4. int length = num.length;
  5. num[length - 1] += k;
  6. for (int i = length - 1; i > 0; i--) {
  7. int curNum = num[i];
  8. if (curNum > 9) {
  9. num[i - 1] += curNum / 10;
  10. num[i] %= 10;
  11. }
  12. sum.add(num[i]);
  13. }
  14. do {
  15. sum.add(num[0] % 10);
  16. num[0] /= 10;
  17. } while (num[0] > 0);
  18. Collections.reverse(sum);
  19. return sum;
  20. }
  21. }

复杂度分析

  • 时间复杂度:数组题目:数组形式的整数加法 - 图39)#card=math&code=O%28%5Cmax%28n%2C%5Clog_%7B10%7D%20k%29%29&id=sfUwI),其中 数组题目:数组形式的整数加法 - 图40 是数组 数组题目:数组形式的整数加法 - 图41 的长度。需要遍历数组 数组题目:数组形式的整数加法 - 图42 和数字 数组题目:数组形式的整数加法 - 图43 的每一位,完成加法的计算。
  • 空间复杂度:数组题目:数组形式的整数加法 - 图44#card=math&code=O%281%29&id=xv6wS)。除了返回值以外,使用的空间复杂度是常数。