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

82 阅读1分钟

[toc] leetcode 989. 数组形式的整数加法.

题目描述

  1. 数组形式的整数加法

整数的 数组形式 num 是按照从左到右的顺序表示其数字的数组。

例如,对于 num = 1321 ,数组形式是 [1,3,2,1] 。 给定 num ,整数的 数组形式 ,和整数 k ,返回 整数 num + k 的 数组形式 。

示例 1:

输入:num = [1,2,0,0], k = 34 输出:[1,2,3,4] 解释:1200 + 34 = 1234 示例 2:

输入:num = [2,7,4], k = 181 输出:[4,5,5] 解释:274 + 181 = 455 示例 3:

输入:num = [2,1,5], k = 806 输出:[1,0,2,1] 解释:215 + 806 = 1021

提示:

1 <= num.length <= 104 0 <= num[i] <= 9 num 不包含任何前导零,除了零本身 1 <= k <= 104

解题思路

法1

模拟:

两个指针来处理两个数组的加法,其中一个指针用于遍历num数组,另一个指针用于处理整数k。

通过将k与num[i]相加,并将结果添加到结果数组中。

如果数组中的数字大于9,则取其个位数,并将十位数进位到下一位。最后,需要反转结果数组以得到正确的顺序。

  • 时间复杂度(O(n))
  • 空间复杂度(O(1))

执行结果

法1

func addToArrayForm(num []int, k int) []int {
	result := make([]int, 0)
	i := len(num) - 1

	for i >= 0 || k > 0 {
		if i >= 0 {
			k += num[i]
		}
		result = append(result, k%10)
		k /= 10
		i--
	}

	reverse(result)

	return result
}

func reverse(nums []int) {
	i, j := 0, len(nums)-1
	for i < j {
		nums[i], nums[j] = nums[j], nums[i]
		i++
		j--
	}
}

执行结果: 通过 显示详情 查看示例代码 添加备注

执行用时: 20 ms , 在所有 Go 提交中击败了 94.12% 的用户 内存消耗: 6.6 MB , 在所有 Go 提交中击败了 76.47% 的用户 通过测试用例: 152 / 152 炫耀一下:

本文由mdnice多平台发布