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)