1/22力扣每日一题~数组形式的整数加法

如题~

对于非负整数 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

提示:
1 <= A.length <= 10000
0 <= A[i] <= 9
0 <= K <= 10000
如果 A.length > 1,那么 A[0] != 0

在没看到提示之前,我一度曾想过用暴力相加法!

但是!今天我看提示了。。。

然后,直接上代码。

//1.知道K的长度
//2.数组相加,逢十进一
//3.将数组翻转
int* addToArrayForm(int* A, int ASize, int K, int* returnSize) {
     
    if(K == 0 )
    {
     *returnSize = ASize;
        return A;
    }
    int Ksize = 0,a;//1.定义K的长度
    for(a=K;a>0;Ksize++)
    {
     
        a/=10;
    }
    int* returnX = malloc(sizeof(int) * fmax(Ksize+1, ASize + 1));//比较K和数组的长度谁长
    *returnSize = 0;//返回长度初始为0;
    for (int i = ASize - 1; i >= 0; --i) {
     //数组相加
        int sum = A[i] + K % 10;
        K /= 10;
        if (sum >= 10) {
     
            K++;
            sum -= 10;//2.开始逢十进一
        }
        returnX[(*returnSize)++] = sum;//一方面给returnSize++,一方面给数组数值
    }
    for (      ; K > 0; K /= 10) //这里如果K的长度大于了A的长度,K主导,再加!
    {
     
        returnX[(*returnSize)++] = K % 10;
    }
    for (int i = 0; i < (*returnSize) / 2; i++) //可以看出,咱们之前的都是倒序,该改过来了!
    {
     
        int c = returnX[i];
        returnX[i] = returnX[(*returnSize) - 1 - i];
        returnX[(*returnSize) - 1 - i] = c;
    }
    return returnX;
}

1/22力扣每日一题~数组形式的整数加法_第1张图片

你可能感兴趣的:(leetcode,算法,c语言)