返回
LeetCode 第八题(字符串转换整数):从入门到精通
后端
2023-12-31 20:37:30
题目
LeetCode第八题(字符串转换整数)是一道经典的算法题,考察了程序员对字符串处理和数值转换的掌握程度。题目要求实现一个myAtoi(String s)
函数,使其能将字符串转换成一个32位有符号整数。
解题思路
这道题的解题思路很简单,主要分为以下几步:
- 字符串预处理 :首先,需要对输入字符串进行预处理,去除首尾空格并检查是否有正负号。
- 整数转换 :接下来,需要将字符串中的数字字符转换为整数。可以采用ASCII码的方式逐个字符转换,也可以使用正则表达式进行匹配。
- 边界处理 :最后,需要对转换后的整数进行边界处理,将其限制在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第八题(字符串转换整数)是一道经典的算法题,考察了程序员对字符串处理和数值转换的掌握程度。通过对题目、解题思路和代码实现的详细介绍,希望能够帮助读者快速理解这道题并掌握其解法。