【每日刷题】Day2

发布于:2024-04-05 ⋅ 阅读:(197) ⋅ 点赞:(0)
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;

}


网站公告

今日签到

点亮在社区的每一天
去签到