返回

LeetCode 第八题(字符串转换整数):从入门到精通

后端

题目

LeetCode第八题(字符串转换整数)是一道经典的算法题,考察了程序员对字符串处理和数值转换的掌握程度。题目要求实现一个myAtoi(String s)函数,使其能将字符串转换成一个32位有符号整数。

解题思路

这道题的解题思路很简单,主要分为以下几步:

  1. 字符串预处理 :首先,需要对输入字符串进行预处理,去除首尾空格并检查是否有正负号。
  2. 整数转换 :接下来,需要将字符串中的数字字符转换为整数。可以采用ASCII码的方式逐个字符转换,也可以使用正则表达式进行匹配。
  3. 边界处理 :最后,需要对转换后的整数进行边界处理,将其限制在32位有符号整数的范围内。

代码实现

下面以C++、Java和Python三种语言分别给出了myAtoi(String s)函数的代码实现:

int myAtoi(string s) {
  // 去除首尾空格
  s.erase(s.find_last_not_of(' ') + 1);
  s.erase(0, s.find_first_not_of(' '));
  
  // 检查是否有正负号
  int sign = 1;
  if (s[0] == '-') {
    sign = -1;
    s.erase(0, 1);
  } else if (s[0] == '+') {
    s.erase(0, 1);
  }
  
  // 将字符串中的数字字符转换为整数
  int result = 0;
  for (char c : s) {
    if (c < '0' || c > '9') {
      break;
    }
    result = result * 10 + (c - '0');
  }
  
  // 边界处理
  result *= sign;
  if (result > INT_MAX) {
    return INT_MAX;
  } else if (result < INT_MIN) {
    return INT_MIN;
  }
  return result;
}
public int myAtoi(String s) {
  // 去除首尾空格
  s = s.trim();
  
  // 检查是否有正负号
  int sign = 1;
  if (s.charAt(0) == '-') {
    sign = -1;
    s = s.substring(1);
  } else if (s.charAt(0) == '+') {
    s = s.substring(1);
  }
  
  // 将字符串中的数字字符转换为整数
  int result = 0;
  for (int i = 0; i < s.length(); i++) {
    char c = s.charAt(i);
    if (c < '0' || c > '9') {
      break;
    }
    result = result * 10 + (c - '0');
  }
  
  // 边界处理
  result *= sign;
  if (result > Integer.MAX_VALUE) {
    return Integer.MAX_VALUE;
  } else if (result < Integer.MIN_VALUE) {
    return Integer.MIN_VALUE;
  }
  return result;
}
def myAtoi(s):
  # 去除首尾空格
  s = s.strip()
  
  # 检查是否有正负号
  sign = 1
  if s[0] == '-':
    sign = -1
    s = s[1:]
  elif s[0] == '+':
    s = s[1:]
  
  # 将字符串中的数字字符转换为整数
  result = 0
  for c in s:
    if c < '0' or c > '9':
      break
    result = result * 10 + (ord(c) - ord('0'))
  
  # 边界处理
  result *= sign
  if result > 2**31 - 1:
    return 2**31 - 1
  elif result < -2**31:
    return -2**31
  return result

结语

LeetCode第八题(字符串转换整数)是一道经典的算法题,考察了程序员对字符串处理和数值转换的掌握程度。通过对题目、解题思路和代码实现的详细介绍,希望能够帮助读者快速理解这道题并掌握其解法。