倒序插入
2023年3月9日 13:24
这个刚开始写的时候担心数组的长度和时间复杂度的原因,担心通过不了,结果没想过通过了。
我是用一个result数组来装将返回的分割数位值,考虑他们的长度,每一个元素的大小在10的五次方以内,分割之后100000共有六位,也就是最大是6,加上数组的长度最大是1000,于是我就把数组的大小取为6*10000=60000.
虽然我也知道浪费空间,但是我目前没有更好的方法,希望有大佬能够指点。
确定了返回数组了,然后就是然后把原始的整数拆分插入到结果数组中,后面我想到只要逐个不断求余就可以得到每一位数,后面我就在第一层遍历中添加一个循环得到整数的各个数位,但是提交的结果不符合要求,题目要求将数位按原本出现的顺序排列成数组,于是我就用一个数组作为辅助空间,将它反向添加,于是就得到了和题目意思相同的结果,辅助空间的大小就是一个整数拥有的各个位数的数量,由前面可以知道最大是6。
之后返回即可。
int* separateDigits(int* nums, int numsSize, int* returnSize){
int *result=(int*)malloc(sizeof(int)*60000);
int count=0;
//遍历整个数组
for(int i=0;i<numsSize;i++){
int tmp=nums[i];
int help[6];
int tmpCount=0;
//得到整数的各个数位,将他们储存在一个辅助数组中
while(tmp){
help[tmpCount++]=tmp%10;
tmp=tmp/10;
}
//把数组中的元素倒序添加到结果数组中
for(int j=tmpCount-1;j>=0;j--){
result[count++]=help[j];
}
}
*returnSize=count;
return result;
}