/*** 将字符串转换为数字——LeetCode第8题** author: aliao*/#include <stdio.h>#include <limits.h>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] != '\0') { if (str[i] >= 48 && str[i] <= 57) { len += 1; i++; } else { break; } } int reverse = 0; int k = 10; int isNeg = 0; for (int j = 0; j < len; j++) { if (j == 0) { if (str[start + j] == '-') { isNeg = 1; continue; } else if (str[start + j] == '+') { continue; } } if (isNeg) { if (reverse < INT_MIN / 10 || reverse == INT_MIN / 10 && str[start + j] - 48 > 8) { return INT_MIN; } else { reverse = reverse * k - (str[start + j] - 48); } } else { if (reverse > INT_MAX / 10 || reverse == INT_MAX / 10 && str[start + j] - 48 > 7) { return INT_MAX; } else { reverse = reverse * k + (str[start + j] - 48); } } } return reverse;}int main (void) { char *str = "-2147483648"; printf("final value: %d", myAtoi(str));}
执行用时:0 ms, 在所有 C 提交中击败了100.00%的用户
内存耗费:5.8 MB, 在所有 C 提交中击败了6.09%的用户
工夫复杂度O(n),空间复杂度O(1)