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

题目:对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。例如,如果 X = 1231,那么其数组形式为 1,2,3,1。

给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。

整体思路可以归纳为以下三个关键步骤:

  1. 从低位(末尾)开始对齐相加

    像列竖式一样,必须从个位开始算。对于数组 A,我们从最后一位(索引 ASize - 1)往前遍历;对于数字 K,我们通过不断取模(K % 10)来剥离出它的个位、十位、百位。把取出的这两个数字,连同进位(初始为 0)一起相加。

  2. 处理进位,顺次存放

    每次相加后,如果结果大于 9,就意味着需要向前进一位(进位设为 1),而当前位只保留减去 10 之后的余数。计算好的数字会被按顺序依次存入一个新的结果数组 retArr 中。只要数组 A 还没遍历完、数字 K 还没除尽,或者最后还留着一个进位,这个循环相加的过程就会一直继续。

  3. 整体翻转(修正顺序)

    这是这个思路里最特别的一点:因为我们是从个位开始算,并且是从新数组的索引 0 开始存的,这就导致存进去的数字顺序是倒着的 (比如正确结果是 1035,数组里存的其实是 [5, 3, 0, 1])。因此,最后必须通过双指针不断交换首尾元素,把整个数组翻转过来,恢复成正常的数字顺序。

    复制代码
    int* addToArrayForm(int* A, int ASize, int K, int* returnSize){
        int kSize = 0;
        // 134
        int kNum = K;
        while(kNum)
        {
            ++kSize;
            kNum /= 10;
        }
    
        int len = ASize > kSize ? ASize : kSize;
        int* retArr = (int*)malloc(sizeof(int)*(len+1));
    
        // A []
        int Ai = ASize-1;
        int reti = 0;
        int nextNum = 0; // 进位
        while(len--)
        {
            int a = 0;
            if(Ai >= 0)
            {
                a = A[Ai];
                Ai--;
            }
            int ret = a + K%10 + nextNum;
            K /= 10;
    
            if(ret > 9)
            {
                ret -= 10;
                nextNum = 1;
            }
            else
            {
                nextNum = 0;
            }
    
            retArr[reti] = ret;
            ++reti;
        }
    
        if(nextNum == 1)
        {
            retArr[reti] = 1;
            ++reti;
        }
    
        int left = 0, right = reti-1;
        while(left < right)
        {
            int tmp = retArr[left];
            retArr[left] = retArr[right];
            retArr[right] = tmp;
            ++left;
            --right;
        }
    
        *returnSize = reti;
        return retArr;
    }
相关推荐
维克兜率天1 小时前
【维克】均值回归:跌多了会涨,涨多了会跌
开发语言·笔记·python·算法·均值算法·回归·量化
yi0112 小时前
DAY 14: LeetCode 394. 字符串解码|递归和栈到底怎么处理嵌套?
数据结构·笔记·python·算法·leetcode
P.D.Wei2 小时前
[Leetcode 1614] 括号的最大嵌套深度
算法·leetcode·职场和发展
红姐跨境书2 小时前
AI 的底层逻辑:从数据、算法到智能的本质
人工智能·算法
繁华的地方不一定留下你的脚印2 小时前
C++ 算法与 ranges:用 find_if、transform 写清数据处理意图
开发语言·c++·算法
张小姐的猫2 小时前
【AI大模型接入SDK】 —— 前端页面 & 项目总结与拓展
前端·数据结构·数据库·c++·人工智能·chatgpt
青山是哪个青山2 小时前
LeetCode 64:最小路径和
算法
blxr_2 小时前
力扣hot100寻找重复数https://leetcode.cn/problems/find-the-duplicate-number/
算法·leetcode·职场和发展
政企项目老覃3 小时前
金融医疗数据脱敏与隐私计算:从字段打码到联邦建模的落地复盘
程序人生·算法·金融·数据分析