第一次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| class Solution { public: int myAtoi(string s) { int sum = 0; int positive = 1; bool isEntered = false; for (const auto &ch : s) { switch (ch) { case '+': if (!isEntered) { positive = 1; isEntered = true; } else return positive * sum; break; case '-': if (!isEntered) { positive = -1; isEntered = true; } else return positive * sum; break; default: if (ch >= 48 && ch <= 57) { if (!isEntered) isEntered = true; int pop = ch - 48; switch (positive) { case 1: if (sum > INT_MAX / 10 || (sum == INT_MAX / 10 && pop > 7)) return INT_MAX; break; case -1: if (-sum < INT_MIN / 10 || (-sum == INT_MIN / 10 && pop >= 8)) return INT_MIN; break; } sum = sum * 10 + pop; } else if (ch != ' ') { return positive * sum; }else if (ch == ' ' && isEntered) { return positive * sum; } } } return positive * sum; } };
|
坑有点多,起初忽视了很多种情况
其中判断是否溢出参考了https://leetcode.com/problems/reverse-integer/solution/
