Leetcode数据结构算法题数组形式的整数加法(顺序表篇)

Posted 大家好我叫张同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode数据结构算法题数组形式的整数加法(顺序表篇)相关的知识,希望对你有一定的参考价值。

题目内容:

对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。
例如,如果 X = 1231,那么其数组形式为[1,2,3,1]。
给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。


leetcode题目链接(点击即可跳转):


方法一:还原重组法(有坑)

1)先将数组还原成数字。例如:[1,2,0,0]还原成1200
2)再将还原的数字与X相加,得到结果。例如:1200 + 34 = 1234
3)再将结果转化为数组。例如 1234 转化为[1,2,3,4]

函数接口实现

int* addToArrayForm(int* num, int numSize, int k, int* returnSize)
    //1)将数组还原成数字
    int i = 0;
    int A = 0;
    while(i < numSize)
        A += num[i]*pow(10,numSize-i-1);
        i++;
    
    //2)将数字相加得到结果
    int sum = A + k;
    //3)将结果转化成数组形式
    //计算sum的位数
    int tmp = sum;
    i = 1;
    while(tmp /= 10)
        i++;
    
    *returnSize = i;
    int* arr = (int*)malloc((*returnSize) * sizeof(int));
    while(i > 0)
        arr[i-1] = sum % 10;
        sum /= 10;
        i--;
    
    return arr;

测试结果:普通用例可以通过测试,但是当数组的长度较长时,超过int类型所能表示的范围时就会出错。int的取值范围为: -2^31 到 2^31-1,即-2147483648到2147483647


方法二:数组逐位相加法

既然将数组还原成数字然后相加的方法行不通,那么我们很自然能想到另外一条路“将数字转化成数组,然后数组 + 数组”。
1)将数字k转化成数组。例如34变为[3,4]
2)将数组与数组相加,要考虑数字之间的进位关系。
3)确定相加后的新数组及其长度

函数接口实现

int* addToArrayForm(int* num, int numSize, int k, int* returnSize)
    //计算k的位数
    int count = 1;
    int temp = k;
    while (temp /= 10)
    
        count++;
    
    //比较count和numSize大小,确定要开数组的空间
    int Asize = count > numSize ? count + 1 : numSize + 1;
    int* array = (int*)calloc(Asize, sizeof(int));
    //进行运算
    int i = 0;
    int j = Asize - 1;
    for (i = numSize - 1; i >= 0 || k > 0; )
    
        if (i >= 0)
        
            array[j] += num[i] + k % 10;
            if (array[j] >= 10)
            
                array[j - 1]++;
                array[j] -= 10;
            
            i--;
        
        else
        
            array[j] += k % 10;
            if (array[j] >= 10)
            
                array[j - 1]++;
                array[j] -= 10;
            
            i--;
        
        k /= 10;
        j--;
    
    if (array[0] == 0)//从前往后移位
    
        for (i = 0; i < Asize - 1; i++)
        
            array[i] = array[i + 1];
        
        *returnSize = Asize - 1;
    
    else
    
        *returnSize = Asize;
    
    return array;


原创不易,各位小伙伴点个赞,评论+关注呗~
(小手点赞,水逆退散,逢考必过,诸事顺利~)

以上是关于Leetcode数据结构算法题数组形式的整数加法(顺序表篇)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题989-简单-数组形式的整数加法

LeetCode刷题989-简单-数组形式的整数加法

989. 数组形式的整数加法『简单』

加法模板一类题一网打尽

LeetCode:989,67(加法)

[算法] leetcode顺序表相关题目详解