989.数组形式的整数加法Java
题目描述
对于非负整数 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,1,5], K = 806
输出:[1,0,2,1]
解释:215 + 806 = 1021
示例3:
输入: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
本文题来自LeetCode:https://leetcode-cn.com/problems/add-to-array-form-of-integer/
思路
遍历数组,将数组和输入的k每一位逐位相加。相加结果如果大于等于10,就在下一位相加时再+1.
算法分析
时间复杂度O(max( n, log k)),空间复杂度为O(1)
求解函数
public List<Integer> addToArrayForm(int[] num, int k) {
List<Integer> list = new ArrayList<>();
for (int i = num.length - 1; i >= 0; --i) {
int sum = num[i] + k % 10;
k /= 10;
if (sum >= 10) {
k++;
sum -= 10;
}
list.add(0, sum); //插入的索引为0,类似于头插
}
for (; k > 0; k/= 10) {
list.add(0, k % 10);
}
return list;
}
主函数调用
class Solution989 {
public static void main(String[] args) {
Solution989 sol = new Solution989();
int[] A = new int[]{9,9,9,9,9,9,9,9,9,9};
System.out.println(sol.addToArrayForm(A, 1));
}
public List<Integer> addToArrayForm(int[] num, int k) {...}
}