1. 题目描述
描述:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
2. 题目解析
2.1 考察问题
本问题考察字符串遍历和字符ASCII使用的问题。
由于整数有最大限制,所以需要去做判断。
2.2 解决方法
- 从后往前遍历字符串,十进制求和
首先对符号位进行判断,然后从后往前遍历字符串,计算十进制大小。判断是否越界,最后把符号位加上,输出。
时间复杂度 O ( n ) O(n) O(n),空间复杂度 O ( 1 ) O(1) O(1)
2.3 优化分析
不需要优化,时间空间都没法省了。
3. 代码实现
3.1 从后往前遍历字符串,十进制求和
# -*- coding:utf-8 -*-
class Solution:
def StrToInt(self, s):
# write code here
if not len(s):
return 0
sign = -1 if s[0] == '-' else 1
if s[0] == '-' or s[0] == '+': ### 有无符号单独处理
if not s[1:].isdigit():
return 0
num = self.StringToInt(s[1:])
else:
if not s.isdigit():
return 0
num = self.StringToInt(s)
if (sign > 0 and num > 0x7FFFFFFF) or (sign < 0 and num > 0x80000000):### 最大最小值判断
return 0
else:
return sign * num
def StringToInt(self, s): ### 字符串转整数的函数
len_s = len(s)
result = 0
while len_s > 0:
result += (ord(s[len(s) - len_s]) - ord('0')) * (10**(len_s-1)) ##从后往前遍历,进行十进制转换
len_s -= 1
return result