?
目录
?
1.移除元素
2.删除有序数组中的重复项
?3.数组形式的整数加法
1.移除元素
https://leetcode-cn.com/problems/remove-element/https://leetcode-cn.com/problems/remove-element/
int removeElement(int* nums, int numsSize, int val){
int dst=0;
int src=0;//设置两个数标,都指向数组首元素,
while(src<numsSize)
{
if(nums[src]!=val)//如果src数组元素是不等于val,直接给dst,否则src++
{
nums[dst]=nums[src];//
src++;
dst++;
}
else
src++;
}
return dst;
}
2.删除有序数组中的重复项
力扣https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/submissions/
int removeDuplicates(int* nums, int numsSize){
int prev=0,dst=0,cur=1;
if(numsSize==0)//不要忘空数组
return 0;
while(cur<numsSize)
{
if(nums[prev]==nums[cur])
{
prev++;
cur++;
}
else
{
nums[dst]=nums[prev];
prev++;
cur++;
dst++;
}
}
nums[dst]=nums[prev];
dst++;
prev++;
return dst;
}
?
?3.数组形式的整数加法
https://leetcode-cn.com/problems/add-to-array-form-of-integer/https://leetcode-cn.com/problems/add-to-array-form-of-integer/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* addToArrayForm(int* num, int numSize, int k, int* returnSize){
int ksize=0;
int asize=numSize;
int knum=k;
if(numSize==0)
return 0;
while(knum)//整数的长度
{
ksize++;
knum/=10;
}
int len=ksize>asize?ksize:asize;//最长的数值来进行循环
int* retarr=(int *)malloc(sizeof(int)*(len+1));
int retnum=0;
int numcarry=0,ret=0;
while(len--)
{
int a=0;
if(asize>0)
{
a=num[asize-1];
asize--;
}
ret=k%10+a+numcarry;
k/=10;
if(ret>9)
{
ret-=10;
numcarry=1;//如果有进位将numcarry制成1
}
else
{
numcarry=0;
}
retarr[retnum]=ret;
retnum++;
}
if(numcarry==1)
{
retarr[retnum]=numcarry;//最后要检验最高位是否有进位,若有则然数组最后以为等于进位
retnum++;
numcarry=0;
}
int left=0,right=retnum-1;
while(left<right)//因为数值是从0开始排的,所以最后结果需要倒置
{
int temp=retarr[left];
retarr[left]=retarr[right];
retarr[right]=temp;
left++;
right--;
}
*returnSize=retnum;
return retarr;
}
|