【每日刷题】Day83
🥕个人主页:开敲🍉
🔥所属专栏:每日刷题🍍
🌼文章目录🌼
1. LCR 192. 把字符串转换成整数 (atoi) - 力扣(LeetCode)
1. LCR 192. 把字符串转换成整数 (atoi) - 力扣(LeetCode)
//思路:遍历。
int myAtoi(char* str)
{
long long ans = 0;
int flag1 = 0;
int flag2 = 0;
//跳过空白字符
while(*str==' ')
{
str++;
}
//判断为正数还是负数
if(*str=='-')
{
flag1 = 1;
flag2 = 1;
str++;
}
else if(*str=='+')
str++;
while(*str!='\0'&&(*str>=48&&*str<=57))
{
//如果为负数,则结果初始要为负
if(flag1)
{
ans = ans-(*str-'0');
flag1 = 0;
str++;
continue;
}
//为负数则减去该位
if(flag2)
{
if(ans*10<INT_MIN)
return INT_MIN;
ans = ans*10-(*str-'0');
}
//为正数则加上该位
else
{
if(ans*10>INT_MAX)
return INT_MAX;
ans = ans*10+(*str-'0');
}
str++;
}
//控制结果在整型范围内
if(ans>INT_MAX)
ans = INT_MAX;
if(ans<INT_MIN)
ans = INT_MIN;
return (int)ans;
}
2. 415. 字符串相加 - 力扣(LeetCode)
//思路:字符串存储+进位。
char * addStrings(char * num1, char * num2)
{
int str1 = strlen(num1);
int str2 = strlen(num2);
int size_tmp = str1+2;
if(str2>str1)
size_tmp = str2+2;
//这里需要空出字符串0位置
char* tmp = (char*)malloc(sizeof(char)*size_tmp);
tmp[size_tmp-1] = '\0';
int i = str1-1;
int j = str2-1;
int flag = 0;
int tmpsize = size_tmp-2;
while(i>=0||j>=0)
{
//从后往前获取每一位
int a = i>=0?(num1[i]-'0'):0;
int b = j>=0?(num2[j]-'0'):0;
//位相加再加上进位标志再取模
tmp[tmpsize--] = (a+b+flag)%10+'0';
if(a+b+flag>=10)
flag = 1;
else
flag = 0;
if(i>=0)
i--;
if(j>=0)
j--;
}
char* ans = (char*)malloc(sizeof(char)*10000);
int count = 0;
//如果除了循环flag还为1,则说明进到最高位
if(flag)
{
tmp[0] = '1';
for(int i = 0;i<strlen(tmp);i++)
{
ans[count++] = tmp[i];
}
}
//否则,字符串0位置的值我们不计入结果
else
{
for(int i = 1;i<strlen(tmp);i++)
{
ans[count++] = tmp[i];
}
}
ans[count] = '\0';
return ans;
}
3. 344. 反转字符串 - 力扣(LeetCode)
//思路:双指针。
void Swap(char* x,char* y)
{
char tmp = *x;
*x = *y;
*y = tmp;
}
void reverseString(char* s, int sSize)
{
int i = 0;
int j = sSize-1;
while(i<j)
{
Swap(&s[i],&s[j]);
i++;
j--;
}
}