1. 26. 删除有序数组中的重复项 - 力扣(LeetCode)
int removeDuplicates(int* nums, int numsSize)
{
int* newnums = (int*)malloc(numsSize*sizeof(int));
int k = 0;
int i = 0;
int pf1 = 0;
int pf2 = 1;
if(numsSize==1)
{
newnums[k++] = nums[0];
}
if(numsSize==2)
{
if(nums[pf1]==nums[pf2])
{
newnums[k++] = nums[pf1];
pf1++;
pf2++;
}
else
{
newnums[k++] = nums[pf1];
newnums[k++] = nums[pf2];
pf1++;
pf2++;
}
}
while(pf2<numsSize)
{
if(nums[pf1]==nums[pf2])
{
if(pf2==numsSize-1)
{
newnums[k++] = nums[pf1];
}
pf1++;
pf2++;
continue;
}
else
{
newnums[k++] = nums[pf1];
if(pf2==numsSize-1)
{
newnums[k++] = nums[pf2];
}
}
pf1++;
pf2++;
}
for(i = 0;i<k;i++)
{
nums[i] = newnums[i];
}
return k;
}
2. 66. 加一 - 力扣(LeetCode)
int* plusOne(int* digits, int digitsSize, int* returnSize)
{
int* add = (int*)malloc((digitsSize+1)*sizeof(int));
memset(add,0,(digitsSize+1)*sizeof(int));
for(int i = digitsSize-1;i>=0;i--)
{
if(digits[i]!=9)
{
digits[i]+=1;
*returnSize = digitsSize;
return digits;
}
if(digits[i]==9)
{
digits[i] = 0;
}
}
add[0] = 1;
*returnSize = digitsSize+1;
return add;
}
3. 67. 二进制求和 - 力扣(LeetCode)
void reserve(char* s)
{
int len = strlen(s);
for (int i = 0; i < len / 2; i++)
{
char t = s[i];
s[i] = s[len - i - 1];
s[len - i - 1] = t;
}
}
char* addBinary(char* a, char* b)
{
reserve(a);
reserve(b);
int len_a = strlen(a), len_b = strlen(b);
int n = fmax(len_a, len_b);
int carry = 0;
int len = 0;
char* ans = (char*)malloc(sizeof(char) * (n + 2));
for (int i = 0; i < n; ++i)
{
carry += i < len_a ? (a[i] == '1') : 0;
carry += i < len_b ? (b[i] == '1') : 0;
ans[len++] = carry % 2 + '0';
carry /= 2;
}
if (carry)
{
ans[len++] = '1';
}
ans[len] = '\0';
reserve(ans);
return ans;
}