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

目录

第1题:只出现一次的数字

第2题:两数之和

第3题:Excel表列名称

第4题:数组中重复的数字

第5题:二维数组中的查找

第6题:替换空格

第7题:从头到尾打印链表

第8题:斐波拉契数列

第9题:青蛙跳台阶问题

第10题:旋转数组的最小数


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

第1题:只出现一次的数字

试题要求如下:

 回答(C语言): 

//按位异或,相同的数异或为0,任何数与0异或为原数不变
int singleNumber(int* nums, int numsSize){
    int a = 0;
    for(int i = 0;i < numsSize ;i++){

        a ^= nums[i];
    }
    return a;
}

第2题:两数之和

试题要求如下:

回答(C语言): 

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* nums, int numbersSize, int target, int* returnSize){

    int *res = malloc(sizeof(int) * 2);
    *returnSize = 2;
    int i = 0;
    int j = numbersSize - 1;
    while(true){
        if (nums[i] + nums[j] > target) {
            j--;
        } else if (nums[i] + nums[j] < target) {
            i++;
        } else{
            res[0] = i+1;
            res[1] = j+1;
            break;
        }
    }
    return res;
}

第3题:Excel表列名称

试题要求如下:

 回答(C语言): 

char * convertToTitle(int n){
    int len = 0, tmp = n;
    while (tmp){
        len++;
        tmp = (tmp - 1) / 26;
    }
    char *res = (char*)malloc(len + 1);
    tmp = n;
    res[len] = 0;
    while (len--){
        res[len] = (tmp - 1) % 26 + 'A';
        tmp = (tmp - 1) / 26;
    }
    return res;
}

第4题:数组中重复的数字

试题要求如下:

回答(C语言): 

int comp(const void *a, const void *b) {
    return *(int *)a < *(int *)b; //从小到大排序
}

int findRepeatNumber(int* nums, int numsSize){
    qsort(nums, numsSize, sizeof(int), comp);

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

    return -1;
}

第5题:二维数组中的查找

试题要求如下:

回答(C语言): 

bool findNumberIn2DArray(int** matrix, int matrixSize, int* matrixColSize, int target){
    if(matrix==NULL || matrixSize==0 || matrixColSize[0]==NULL) 
        return false;

    for(int i=0;i<matrixSize;i++){
        for(int j=0;j<matrixColSize[0];j++){
            if(matrix[i][j]==target)
                return true;
        }
    }

    return false;
}

第6题:替换空格

试题要求如下:

回答(C语言): 

char* replaceSpace(char* s){
    int i=0,cou=0,len_s=strlen(s);

    while(i<len_s){
        if(s[i]==' '){
            cou++;
        }
        i++;
    }

    char* buf_str=(char*)malloc(sizeof(char)*(len_s+(cou*2)+1));
    int j=0;
    i=0;
    
    while(i<len_s){
        if(s[i]==' '){
            buf_str[j++]='%';
            buf_str[j++]='2';
            buf_str[j]='0';
        }
        else{
            buf_str[j]=s[i];
        }
        i++;
        j++;
    }

    buf_str[j]='\0';

    return buf_str;
}

第7题:从头到尾打印链表

试题要求如下:

回答(C语言): 

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* reversePrint(struct ListNode* head, int* returnSize){
    struct ListNode *p=head,*q=head;
    returnSize[0]=0;

    while(p!=NULL){
        returnSize[0]++;
        p=p->next;
    }

    int *buf_data=(int *)malloc(sizeof(int)*(returnSize[0]));
    int len=returnSize[0];

    while(q!=NULL){
        buf_data[--len]=q->val;
        q=q->next;
    }

    return buf_data;
}

第8题:斐波拉契数列

试题要求如下:

回答(C语言): 

int fib(int n){

    int a=0,b=1,c=0;

    if(n==0){
        return a;
    }

    if(n==1){
        return b;
    }

    for(int i=2;i<=n;i++){
        c=a+b;
        if (c > 1000000007) 
            c %= 1000000007;
        a=b;
        b=c; 
    }

    return c;
}

第9题:青蛙跳台阶问题

试题要求如下:

回答(C语言): 

int numWays(int n){
    int a=1,b=1,c=0;

    if(n==0){
        return a;
    }

    if(n==1){
        return b;
    }

    for(int i=2;i<=n;i++){
        c=a+b;
        if (c > 1000000007) 
            c %= 1000000007;
        a=b;
        b=c; 
    }

    return c;
}

第10题:旋转数组的最小数

试题要求如下:

回答(C语言): 

int minArray(int* numbers, int numbersSize){
    int cou=numbersSize-1;

    while(cou-1>=0){
        if(numbers[cou-1]>numbers[cou]){
            break;
        }
        cou--;
    }

    return numbers[cou];
}
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不脱发的程序猿

亲,赏包辣条吧~

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

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

打赏作者

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

抵扣说明:

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

余额充值