LeetCode 989. 数组形式的整数加法

题目描述

989. 数组形式的整数加法

image-20230312173924486

思路分析

解法一:从后向前模拟(推荐)

核心思路

  • 从数组末尾与整数 k 同时加法,维护进位。
  • 每次取余作为当前位,进位继续。
  • 最后翻转结果。


复杂度分析

  • 时间复杂度:O(n + log k),其中 n 表示数组长度。
  • 空间复杂度:O(n)。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class Solution {
    public List<Integer> addToArrayForm(int[] num, int k) {
        List<Integer> res = new ArrayList<>();
        int i = num.length - 1;
        int carry = 0;

        while (i >= 0 || k > 0 || carry > 0) {
            int sum = carry;
            if (i >= 0) {
                sum += num[i--];
            }
            if (k > 0) {
                sum += k % 10;
                k /= 10;
            }

            res.add(sum % 10);
            carry = sum / 10;
        }

        Collections.reverse(res);
        return res;
    }
}
func addToArrayForm(num []int, k int) []int {
	res := make([]int, 0)
	i := len(num) - 1
	carry := 0

	for i >= 0 || k > 0 || carry > 0 {
		sum := carry
		if i >= 0 {
			sum += num[i]
			i--
		}
		if k > 0 {
			sum += k % 10
			k /= 10
		}

		res = append(res, sum%10)
		carry = sum / 10
	}

	for l, r := 0, len(res)-1; l < r; l, r = l+1, r-1 {
		res[l], res[r] = res[r], res[l]
	}

	return res
}

相似题目

题目 难度 考察点
415. 字符串相加 简单 模拟
67. 二进制求和 简单 模拟
43. 字符串相乘 中等 模拟
2. 两数相加 中等 链表模拟
66. 加一 简单 模拟
本文作者:
本文链接: https://hgnulb.github.io/blog/2021/59170359
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!