力扣(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];
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章