阅读目录
题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:输入一个字符串,包括数字字母符号,可以为空
输出描述:如果是合法的数值表达则返回该数字,否则返回0
示例:
输入
+2147483647
1a33
输出
2147483647
0
思路及Python实现
用正则表达式
import re
class Solution:
def StrToInt(self, s):
if s == "":
return 0
ret = re.search(r"^([+-])?\d+$", s)
if not ret or ret.group() == "-2147483649" or ret.group() == "2147483648":
return 0
else:
return int(ret.group())
利用码值来求解
class Solution:
def StrToInt(self, s):
if s == "" or s == "-2147483649" or s == "2147483648":
return 0
flag = 1 # 标明正负的符号
wei = 0 # 位数指针
num = 0 # 结果
if s[0] in "+-":
if s[0] == "+":
flag = flag
else:
flag *= -1 # 如果是-,就将flag变成-1
s = s[1:] # 将第一个符号,去除
for i in range(len(s) - 1, -1, -1): # 从后往前遍历字符串
if s[i] not in "0123456789": # 先检查是否合法
return 0
else: # 结果加上当前字符*位数
# 字符“0”对应的ASCII码为48。对获得的字符串中的每个字符,
# 求其ASCII码,减去48即为对应位上的数值。
num += (ord(s[i]) - 48) * (10 ** wei)
wei += 1 # 位数每遍历一个字符,就要进一位
return num * flag # 注意正负号