首页 > 其他 > 详细

LeetCode 第8题 字符串转整数

时间:2020-02-10 18:53:49      阅读:49      评论:0      收藏:0      [点我收藏+]

LeetCode 第8题 字符串转整数

题目描述

请你来实现一个?atoi?函数,使其能将字符串转换成整数。
首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。
当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。
注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。
在任何情况下,若函数不能进行有效的转换时,请返回 0。

整体思路

  1. 检查字符串是否为空字符串,若字符串为空字符串,则返回0
  2. 丢弃字符串开头所有空格(blanks)
  3. 若此时字符串已经为空字符串,则返回0
  4. 检查字符串开头的第一个character,若为’+‘ 或 ’-‘,则记录符号后将其丢弃,产生新字符串
  5. 检查新字符串,若新字符串为空白或开头不为数字,则返回0
  6. 遍历新字符串,将每个i(character)加入到另一个新的字符串中,直到i不为数字。
  7. 还记得我们之前提取的符号吗?别忘记将其加上
  8. 将最后的字符串转换为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

LeetCode 第8题 字符串转整数

原文:https://www.cnblogs.com/meloyang/p/12291889.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!