力扣(LeetCode)刷题,简单题(第1期)

目录

第1题:两数之和

第2题:整数反转

第3题:判断回字文

第4题:罗马数字转整数

第5题:最长公共前缀

第6题:判断字符串有效括号

第7题:将两个有序链表合并

第8题:删除重复元素

第9题:移除元素

第10题:实现 strStr() 函数


开启2020年学习新征程,力扣(LeetCode)定期刷题,每期10道题,业务繁重的同志可以看看我分享的思路,不是最高效解决方案,只求互相提升。

第1题:两数之和

试题要求如下:

回答(C语言):

int* twoSum(int* nums, int numsSize, int target, int* returnSize){
    int* res = (int *)malloc(sizeof(int) * 2);

    for(int i = 0; i < numsSize-1; i++) {
        for(int j = i + 1; j < numsSize; j++) {
            if(nums[i] + nums [j] == target) {
                res[0] = i;
                res[1] = j;
                *returnSize = 2;
                return res;
            }
        }       
    }

    *returnSize = 0;
    return res;
}

第2题:整数反转

试题要求如下:

 回答(C语言):

int reverse(int x){
    long num = 0;
    while (x != 0) {
        num = num * 10 + x % 10;
        x = x / 10;
    }
    return (num>2147483647 || num<-2147483648) ? 0 : num;
}

第3题:判断回字文

试题要求如下:

回答(C语言): 

bool isPalindrome(int x){
    int num1=0;
    long num2=0;
    
    num1=x;

    while(num1>0){
        num2=num2*10+num1%10;
        num1/=10;
    }

    if(num2==x)
        return 1;
    else
        return 0;
}

第4题:罗马数字转整数

试题要求如下:

 回答(C语言): 

int charToInt(char c)
{
    char strArray[7] = {'I','V','X','L','C','D','M'};
    int intArray[7] = {1,5,10,50,100,500,1000};

    for(int i = 0; i < 7; i++)
    {
        if(strArray[i] == c)
        {
            return intArray[i];
        }
    }
    return 0;
}

int romanToInt(char * s)
{
    int len = strlen(s);
    int v = 0;
    int c,n;

    for(int i = 0; i < len - 1 ; i++)
    {
        c = charToInt(s[i]);
        n = charToInt(s[i + 1]);
        v = (c < n) ? v - c : v + c;
    }
    v += charToInt(s[len - 1]);
    return v;
}

第5题:最长公共前缀

试题要求如下:

 回答(C语言): 

char * longestCommonPrefix(char ** strs, int strsSize)
{
    if(strsSize==0)
        return "";
    if(strsSize==1)
        return strs[0];
    int i=0,j=0;
    while(1)
    {
        if(strs[i][j]=='\0')
            break;

        if(strs[i][j]==strs[++i][j]) {
            if(i==strsSize-1)
            {
                j++;
                i=0;
            }
        }
        else
            break; 
    }

    char* res=(char*)malloc(j+1);
    res=memset(res,0,j+1);
    res=strncpy(res,strs[0],j);
    return res;
}

第6题:判断字符串有效括号

试题要求如下:

  回答(C语言): 

bool isValid(char * s){
    int top = 0;
    char *stack = (char*)malloc(strlen(s));

    if (s==NULL || strlen(s)<=0) return true;
    
    for (int i = 0; i<strlen(s); i++){
        if(s[i]=='(' || s[i]=='{' || s[i]=='['){
            stack[top++] = s[i];
        }else{
            if(--top < 0) return false;
            if(s[i]==')' && stack[top] != '(') return false;
            if(s[i]=='}' && stack[top] != '{') return false;
            if(s[i]==']' && stack[top] != '[') return false;
        }
    }
    
    if (top > 0) return false;
    return true;
}

第7题:将两个有序链表合并

试题要求如下:

回答(C语言): 

struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
    if(l1==NULL)
        return l2;
    if(l2==NULL)
        return l1;
    if(l1->val < l2->val){
        l1->next = mergeTwoLists(l1->next,l2);
        return l1;
    }else{
        l2->next = mergeTwoLists(l1,l2->next);
        return l2;
    }
}

第8题:删除重复元素

试题要求如下:

回答(C语言): 

int removeDuplicates(int* nums, int numsSize){
    int j=0;

    if(nums==NULL || numsSize<=0)
        return 0;

    for(int i=0;i<numsSize-1;i++){
        if(nums[i]!=nums[i+1])
        {
            nums[j++]=nums[i];
        }
    }

    nums[j]=nums[numsSize-1];

    return j+1;
}

第9题:移除元素

试题要求如下:

 回答(C语言): 

int removeElement(int* nums, int numsSize, int val){
    int cou=0;

    if(nums==NULL || numsSize<=0)
        return 0;

    for(int i=0;i<numsSize;){
        if(nums[i]==val){
            cou++;

            if(i==numsSize-cou)
                break;

            for(int j=i,k=i+1;j<numsSize-cou;j++,k++)
                nums[j]=nums[k];
        }
        else
        {
            i++;
        }
    }

    return numsSize-cou;
}

第10题:实现 strStr() 函数

试题要求如下:

  回答(C语言): 

int strStr(char * haystack, char * needle){
    int i=0,j=0,k=0;

    while(haystack[i]&&needle[j])
    {
        if(haystack[i]==needle[j])
        {
            i++;
            j++;
        }
        else
        {
            k++;
            i=k;
            j=0;
        }
    }

    if(needle[j]=='\0')
        return k;
    return -1;
}

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不脱发的程序猿

亲,赏包辣条吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值