图片来自:https://leetcode.cn/leetbook/read/illustration-of-algorithm/lhqzq5/
- 去除前导空格
- 判断是否有符号
- 对后面的数字进行转 int 的操作,直到添加下一位可能溢出 或 遇到非数字 或 字符串结束
对于第三步的循环解释:
- j 小于字符串长度,且 str[j] 应为数字(204851r596)
- 以2147483647 / 10 == 214748364 为界。小于这个数则可以添加下一位数;等于这个数则需判断接下来的的一位数加上去是否溢出;大于则因为添加下一位数要先*10,所以必定溢出
- 小于边界的情况:1234567891,有123456789 < 214748364,此时可以添加下一位数
- 等于边界的情况:如 2147483648,则 214748364 = = 214748364,而添加8后必定溢出,所以输出溢出时的值;而 214748364 有 214748364 = = 214748364,但是添加 6 后也不溢出
- 大于边界的情况:如3,000,000,000,3,000,000,00 > 214748364,因为添加下一位数要先*10,所以必定溢出;如20,000,000,000,在 9 位时 200,000,000 < 214748364,此时继续添加下一个 0,然后在下一轮循环中 2,000,000,000 就大于边界,再添加下一个 0 会溢出
- 总结:这道题的核心就是在添加下一位后会溢出时,立刻返回溢出值,否则就可以继续添加下一位