示例1:

  1. 输入:s = "42"
  2. 输出:42
  3. 解释:加粗的字符串为已经读入的字符,插入符号是当前读取的字符。
  4. 1 步:"42"(当前没有读入字符,因为没有前导空格)
  5. ^
  6. 2 步:"42"(当前没有读入字符,因为这里不存在 '-' 或者 '+'
  7. ^
  8. 3 步:"42"(读入 "42"
  9. ^
  10. 解析得到整数 42
  11. 由于 "42" 在范围 [-231, 231 - 1] 内,最终结果为 42

示例2:

  1. 输入:s = " -42"
  2. 输出:-42
  3. 解释:
  4. 1 步:" -42"(读入前导空格,但忽视掉)
  5. ^
  6. 2 步:" -42"(读入 '-' 字符,所以结果应该是负数)
  7. ^
  8. 3 步:" -42"(读入 "42"
  9. ^
  10. 解析得到整数 -42
  11. 由于 "-42" 在范围 [-231, 231 - 1] 内,最终结果为 -42

示例3:

  1. 输入:s = "4193 with words"
  2. 输出:4193
  3. 解释:
  4. 1 步:"4193 with words"(当前没有读入字符,因为没有前导空格)
  5. ^
  6. 2 步:"4193 with words"(当前没有读入字符,因为这里不存在 '-' 或者 '+'
  7. ^
  8. 3 步:"4193 with words"(读入 "4193";由于下一个字符不是一个数字,所以读入停止)
  9. ^
  10. 解析得到整数 4193
  11. 由于 "4193" 在范围 [-231, 231 - 1] 内,最终结果为 4193

示例4:

  1. 输入:s = "words and 987"
  2. 输出:0
  3. 解释:
  4. 1 步:"words and 987"(当前没有读入字符,因为没有前导空格)
  5. ^
  6. 2 步:"words and 987"(当前没有读入字符,因为这里不存在 '-' 或者 '+'
  7. ^
  8. 3 步:"words and 987"(由于当前字符 'w' 不是一个数字,所以读入停止)
  9. ^
  10. 解析得到整数 0 ,因为没有读入任何数字。
  11. 由于 0 在范围 [-231, 231 - 1] 内,最终结果为 0

示例5:

  1. 输入:s = "-91283472332"
  2. 输出:-2147483648
  3. 解释:
  4. 1 步:"-91283472332"(当前没有读入字符,因为没有前导空格)
  5. ^
  6. 2 步:"-91283472332"(读入 '-' 字符,所以结果应该是负数)
  7. ^
  8. 3 步:"-91283472332"(读入 "91283472332"
  9. ^
  10. 解析得到整数 -91283472332
  11. 由于 -91283472332 小于范围 [-231, 231 - 1] 的下界,最终结果被截断为 -231 = -2147483648

答案:

  1. var myAtoi = function(s) {
  2. const re = new RegExp(/^(-|\+)?\d+/);
  3. let str = s.trim().match(re);
  4. let res = str ? Number(str[0]) : 0;
  5. return res >= 0 ? Math.min(res, 2**31 - 1) : Math.max(res, -(2**31))
  6. };

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/string-to-integer-atoi
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。