Leetcode数据结构算法题数组形式的整数加法(顺序表篇)
Posted 大家好我叫张同学
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode数据结构算法题数组形式的整数加法(顺序表篇)相关的知识,希望对你有一定的参考价值。
题目内容:
对于非负整数 X 而言,X 的数组形式是每位数字按从左到右的顺序形成的数组。
例如,如果 X = 1231,那么其数组形式为[1,2,3,1]。
给定非负整数 X 的数组形式 A,返回整数 X+K 的数组形式。
方法一:还原重组法(有坑)
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数据结构算法题数组形式的整数加法(顺序表篇)的主要内容,如果未能解决你的问题,请参考以下文章