LeetCode 第8题 字符串转整数
LeetCode 第8题 字符串转整数
题目描述
请你来实现一个 atoi 函数,使其能将字符串转换成整数。
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。
当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。
在任何情况下,若函数不能进行有效的转换时,请返回 0。
整体思路
- 检查字符串是否为空字符串,若字符串为空字符串,则返回0
- 丢弃字符串开头所有空格(blanks)
- 若此时字符串已经为空字符串,则返回0
- 检查字符串开头的第一个character,若为’+‘ 或 ’-‘,则记录符号后将其丢弃,产生新字符串
- 检查新字符串,若新字符串为空白或开头不为数字,则返回0
- 遍历新字符串,将每个i(character)加入到另一个新的字符串中,直到i不为数字。
- 还记得我们之前提取的符号吗?别忘记将其加上
- 将最后的字符串转换为int,并检查其大小是否符号32位int的要求
代码实现
函数:检查字符是否为数字
因为这个要求在这道题里经常被用到,因此写为函数方便使用。检查方法是使用ASCII码。Python中,ord(char)函数将character转化为相应的ASCII码,然后我们只需要判断一个character的ASCII码是否落在相应的范围(0~9)就可以判断它是否是integer了。代码如下:
# Use to check wheter a character is an integer or not
def check_number(char):
try:
if ord(char) >= ord('0') and ord(char) <= ord("9"):
return True
else:
return False
except:
return False
Solution
class Solution:
def myAtoi(self, str: str) -> int:
# Detect blank string
if len(str) == 0:
return 0
# Delete blanks at head of the string:
meet_noblank = False
new_string = ""
for i in str:
if i == ' ' and not meet_noblank:
continue
else:
meet_noblank = True
new_string += i
# Detect blank string
if len(new_string) == 0:
return 0
# Pick the symbol from the string
flag = "+"
if new_string[0] == '-' or new_string[0] == '+':
flag = new_string[0]
new_string = new_string[1:]
# Detect the blank string
if len(new_string) == 0 or not check_number(new_string[0]):
return 0
# Pick the number from the string
number = ""
for i in new_string:
if check_number(i):
number += i
# If i is not a number, break the loop
else:
break
# Add the symbol to the number
answer = int(flag + number)
# Check whether the answer is in the legal range
if answer > 2**31-1:
return 2**31-1
if answer < -2**31:
return -2**31
return answer
浙公网安备 33010602011771号