题目:字符串转整数
这个问题解答的思路跟上个翻转整数一样,都是通过long long类型存储一个结果字符串,然后返回int区域内大小的数字。
这道题我出了好几次问题,后来才发现是因为没有仔细读题,题目只说了去除刚开始遇到的空格而我去除全部了。
我写出的正确的代码如下(效率超过了100%):
static const auto io_speed_up = []() { std::ios::sync_with_stdio(false); cin.tie(nullptr); return 0; }(); class Solution { public: int myAtoi(string str) { size_t index = 0; bool flag = false; long long res = 0; while (str[index] == ' ') ++index; if (str[index] == '-') { flag = true; ++index; } else if(str[index] == '+') ++index; while (str[index] >= '0' && str[index] <= '9' && res < INT_MAX) { res = res * 10 + str[index] - '0'; ++index; } if (flag) res = -res; if (res > INT_MAX) return INT_MAX; if (res < INT_MIN) return INT_MIN; return (int)res; } };
这道题有一个有意思的地方在于,传递的是一个字符串,那么最后一位即str[str.size()]位一定是一个'\0'字符,这个字符必然不会满足数字字符或者空字符的条件。这意味着我们在做这道题中,只要设置好条件,就不用关心字符串长度的问题(每个循环都会少一次判断)。