8.文字列変換整数(LeetCode)——C言語
/*
** ——LeetCode 8
** author: aliao
*/
#include
#include
int myAtoi(char *str)
{
int i = 0;
int start = 0;
int len = 0;
//
while (str[i] == 32)
{
i++;
}
// -+ 0-9 , 0
//
if (str[i] != '-' && str[i] != '+' && (str[i] < 48 || str[i] > 57))
{
return 0;
}
else
{
start = i;
len += 1;
i++;
}
while (str[i] >= 48 && str[i] <= 57)
{
len += 1;
i++;
}
int reverse = 0;
int k = 10;
int isNeg = 1;
for (int j = 0; j < len; j++)
{
if (j == 0)
{
if (str[start + j] == '-')
{
isNeg = -1;
continue;
}
else if (str[start + j] == '+')
{
continue;
}
}
if (reverse < INT_MIN / 10 || reverse == INT_MIN / 10 && str[start + j] - 48 > 8)
{
return INT_MIN;
}
if (reverse > INT_MAX / 10 || reverse == INT_MAX / 10 && str[start + j] - 48 > 7)
{
return INT_MAX;
}
reverse = reverse * k + isNeg * (str[start + j] - 48);
}
return reverse;
}
int main (void) {
char *str = "-2147483648";
printf("final value: %d", myAtoi(str));
}
実行時間:4 ms、すべてのCコミットで70.60%のユーザーを破った
メモリ消費量:5.5 MB、すべてのCコミットで67.00%のユーザーを破った
時間複雑度O(n),空間複雑度O(1)