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

博客围绕非负整数的数组形式展开,给定非负整数的数组形式,需返回整数的数组形式,并给出了多个示例。涉及算法相关内容,与信息技术领域紧密相关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于非负整数 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,7,4], K = 181
输出:[4,5,5]
解释:274 + 181 = 455

示例 3:

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

示例 4:

输入: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
package LeetCode;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/*
输入:A = [1,2,0,0], K = 34
输出:[1,2,3,4]
解释:1200 + 34 = 1234
解释 2:
输入:A = [2,7,4], K = 181
输出:[4,5,5]
解释:274 + 181 = 455
示例 3:
输入:A = [2,1,5], K = 806
输出:[1,0,2,1]
解释:215 + 806 = 1021
示例 4:
输入: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
 */
public class AddToArrayForm {
    public List<Integer> addToArrayForm(int[] A, int K) {
        String Ks = K + "";
        char[] kl = Ks.toCharArray();
        int maxlength = Math.max(A.length, kl.length);
        int[] res = new int[maxlength + 1];
        int min = Math.min(A.length, kl.length);
        int i = 0;
        //循环最高位数
        while (i < maxlength) {
            //当前i如果是小于最低位的那一个数组也就是得进行两个数组加在一起计算
            if (i < min) {
                //两个数组加在一起计算得到x
                int x = res[res.length - 1 - i] + A[A.length - i - 1] + kl[kl.length - i - 1] - 48;
                //判断是否需要进位
                if (x >= 10) {
                    res[res.length - 1 - i] = x % 10;
                    res[res.length - i - 2] = x / 10;
                } else {
                    res[res.length - 1 - i] = x;
                }
            } else {
                //i大于最小位数了也就说不需要两个数组相加了需要一个数组判断是否能进行进位或者直接赋值
                if (A.length > kl.length) {
                    res[res.length - 1 - i] += A[A.length - i - 1];
                } else {
                    res[res.length - 1 - i] += kl[kl.length - i - 1] - 48;
                }
                if (res[res.length - 1 - i] >= 10) {
                    res[res.length - 2 - i] = res[res.length - 1 - i] / 10;
                    res[res.length - 1 - i] = res[res.length - 1 - i] % 10;
                }
            }
            i++;
        }

        List<Integer> ress = new ArrayList();
        if (res[0] != 0) {
            ress.add(res[0]);
        }
        for (int j = 1; j < res.length; j++) {
            ress.add(res[j]);
        }
        return ress;
    }

    public static void main(String[] args) {
        AddToArrayForm a = new AddToArrayForm();
        int[] m = {2,7,4};
        a.addToArrayForm(m, 181);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值