目录

​一、最后一个单词长度​

​1、题目描述​

​2、题解​

​3、源码​

​二、加一​

​1、题目描述​

​2、题解​

​3、源码​

​三、二进制求和​

​1、题目描述​

​2、题解​

​3、源码​

​四、x的平方根​

​1、题目描述​

​2、题解​

​3、源码​

​五、爬楼梯​

​1、题目描述​

​2、题解​

​3、源码​


一、最后一个单词长度

1、题目描述

LeetCode C语言刷题——day1_leetcode

2、题解

LeetCode C语言刷题——day1_git_02

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_c语言_03

2、题解

LeetCode C语言刷题——day1_leetcode_04

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<digitsSize-1;i++){//其它位置复制即可
ans_arr[i] = digits[i];
}
return ans_arr;
}else {//最后一位为9
for(i = 0;i < digitsSize;i++){
if (digits[i] == 9) {
n++;//记录9的个数,判断是否全为9
}
}
if (n == digitsSize) {//全为9
*returnSize = digitsSize + 1;
ans_arr[0] = 1;//第一位
for (i = digitsSize ; 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<a;i++){
ans_arr[i] = digits[i];
}
return ans_arr;
}
}
return ans_arr;
}

三、二进制求和

1、题目描述

LeetCode C语言刷题——day1_c语言_05

2、题解

LeetCode C语言刷题——day1_leetcode_06

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_c语言_07

2、题解

LeetCode C语言刷题——day1_i++_08

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_leetcode_09

2、题解

LeetCode C语言刷题——day1_leetcode_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;
}