LeetCode C语言刷题——day1

目录

一、最后一个单词长度

1、题目描述

2、题解

3、源码

二、加一

1、题目描述

2、题解

3、源码

三、二进制求和

1、题目描述

2、题解

3、源码

四、x的平方根

1、题目描述

2、题解

3、源码

五、爬楼梯

1、题目描述

2、题解

3、源码


一、最后一个单词长度

1、题目描述

LeetCode C语言刷题——day1_第1张图片

2、题解

LeetCode C语言刷题——day1_第2张图片

3、源码

int lengthOfLastWord(char * s){
    int count=0;
    for (int i = strlen(s) - 1;i >= 0;i--){
        if(s[i] != ' '){
            count++;
        }
        if(s[i]==' '&& count!=0) break;
    }
    return count;
}

二、加一

1、题目描述

LeetCode C语言刷题——day1_第3张图片

2、题解

LeetCode C语言刷题——day1_第4张图片

3、源码

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* plusOne(int* digits, int digitsSize, int* returnSize){
    int* ans_arr = (int*)malloc(sizeof(int)*(digitsSize+2)); // 申请一个新的空间,之所以加二是为了防止进位产生多了一位
   int i,n =0;
   if (digits[digitsSize-1] != 9){//最后一位不为9
       *returnSize = digitsSize;
       ans_arr[digitsSize-1] = digits[digitsSize-1] + 1;//最后一位进行加一操作
       for (i = 0;i 0;i--){
                ans_arr[i] = 0;//其他位置
           }
           return ans_arr;
       }else {//不全为9
           int a = digitsSize - 1;
           *returnSize = digitsSize;
           while(digits[a] == 9){//从后往前找到9的位置
               ans_arr[a] = 0;
               --a;
           }
           ans_arr[a] = digits[a] + 1;
           for (i = 0;i

三、二进制求和

1、题目描述

LeetCode C语言刷题——day1_第5张图片

2、题解

LeetCode C语言刷题——day1_第6张图片

3、源码

char * addBinary(char * a, char * b){
    // char* r = (char*)malloc(sizeof(char) * (longlen + 2));
    // memset(r,0,sizeof(char) * (longlen + 2));
    // r[0] = '0';
    int alen = strlen(a);
    int blen = strlen(b);
    int longlen = alen > blen ? alen : blen;
    int i = alen - 1;
    int j = blen - 1;
    int k = longlen ;
    int t = 0;
     char* r = (char*)malloc(sizeof(char) * (longlen + 2));
    memset(r,0,sizeof(char) * (longlen + 2));//初始化数组
    r[0] = '0';
    while (k){
        if(i >= 0 && j >= 0) {
            if(a[i] == '1' && b[j] == '1') {
                r[k] = '2'; 
            } else if((a[i] == '1' && b[j] == '0') || (a[i] == '0' && b[j] == '1')) {
                r[k] = '1';
            } else {
                r[k] = '0';
            }
        } else if (i >= 0 && j < 0) {
            r[k] = a[i];
        } else if (i < 0 && j >= 0) {
            r[k] = b[j];
        } else {
            break;
        }
        i--;
        j--;
        k--;
    }
    bool plus = false;
    for (i = longlen;i>=0;i--){
        if(r[i] == '2'){
            if(plus == true){
                r[i] ='1';
            }else {
                r[i] = '0';
            }
            plus = true;
        }else if (r[i] == '1'){
            if(plus == true){
                r[i] = '0';
                plus = true;
            }else {
                plus = false;
            }
        }else if (r[i] == '0'){
            if(plus == true) {
                r[i] = '1';
                plus = false;
            } else{
                plus = false;
            }
        }
    }
    r[longlen+1] = '\0';
    if(r[0] == '0') {
        return r+1;
    } else {
        return r;
    }
    
}

四、x的平方根

1、题目描述

LeetCode C语言刷题——day1_第7张图片

2、题解

LeetCode C语言刷题——day1_第8张图片

3、源码

int mySqrt(int x){
    int leftNum = 1;
    int rightNum = x / 2 + 1;
    int midNum ;
    int sqrt;
    if (x==0) {
        return 0;
    }
     while(leftNum <= rightNum){
         midNum = (leftNum+rightNum) /2;
         sqrt = x / midNum;
         if (sqrt == midNum) {
             return midNum;
         }
         else if (sqrt < midNum)  {
             rightNum = midNum - 1;
         }
         else if (sqrt > midNum) {
             leftNum = midNum + 1;
         }
     }
     return leftNum - 1;
}





五、爬楼梯

1、题目描述

LeetCode C语言刷题——day1_第9张图片

2、题解

LeetCode C语言刷题——day1_第10张图片

3、源码


int climbStairs(int n) {
    int p = 0, q = 0, r = 1;
    for (int i = 1; i <= n; ++i) {
        p = q;
        q = r;
        r = p + q;
    }
    return r;
}

你可能感兴趣的:(Leetcode,练习,leetcode,c语言,算法)