保定建站软件/外链发布的平台最好是
写在前面
这道题 em… 汲取到不少教训。
- Integer 和 Long 并不是万能的,总有 超出范围的时候,不要想着去 直接加。
- 集合中的add方法:add(int index, E element),效率 比 直接add添加 最后倒序遍历 添加到一个新的集合 还要慢 上 好多倍,嗯,不要轻易使用。
题目
整数的 数组形式 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
代码
/*** @author peove* @date 2022-02-28-19:50*/
public class E989 {public static List<Integer> addToArrayForm(int[] num, int k) {List<Integer> res = new ArrayList<>();for (int i = num.length - 1; i >= 0; i--) {int sum = num[i] + k % 10;// 小于 10, 直接加.if (sum < 10) {
// res.add(0, sum);res.add(sum);} else {
// res.add(0, sum % 10);res.add(sum % 10);// 如果不是 头, 往前进一位.if (i - 1 >= 0) {num[i - 1] += 1;} else {if (i == 0 && k / 10 > 0) {k += num[i];} else {
// res.add(0, 1);res.add(1);}}}k /= 10;}while (k > 0) {
// res.add(0, k % 10);res.add(k % 10);k /= 10;}List<Integer> finalRes = new ArrayList<>();for (int i = res.size() - 1; i >= 0; i--) {finalRes.add(res.get(i));}return finalRes;}public static void main(String[] args) {int[] numA = {1, 2, 0, 0};int kA = 34;int[] numB = {2, 7, 4};int kB = 181;int[] numC = {2, 1, 5};int kC= 806;int[] numD = {9,9,9,9,9,9,9,9,9,9};int kD= 1;int[] numE = {6};int kE = 809;int[] numF = {7};int kF = 993;System.out.println("A = " + addToArrayForm(numA, kA));System.out.println("A = " + addToArrayForm(numB, kB));System.out.println("A = " + addToArrayForm(numC, kC));System.out.println("A = " + addToArrayForm(numD, kD));System.out.println("A = " + addToArrayForm(numE, kE));System.out.println("A = " + addToArrayForm(numF, kF));}
}
附:测试图
来源
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-to-array-form-of-integer