• 蜗牛慢慢爬 LeetCode 8. String to Integer (atoi) [Difficulty: Medium]


    题目

    Implement atoi to convert a string to an integer.

    Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input cases.

    Notes: It is intended for this problem to be specified vaguely (ie, no given input specs). You are responsible to gather all the input requirements up front.

    Requirements for atoi:
    The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from this character, takes an optional initial plus or minus sign followed by as many numerical digits as possible, and interprets them as a numerical value.

    The string can contain additional characters after those that form the integral number, which are ignored and have no effect on the behavior of this function.

    If the first sequence of non-whitespace characters in str is not a valid integral number, or if no such sequence exists because either str is empty or it contains only whitespace characters, no conversion is performed.

    If no valid conversion could be performed, a zero value is returned. If the correct value is out of the range of representable values, INT_MAX (2147483647) or INT_MIN (-2147483648) is returned.

    翻译

    实现atoi将字符串转换为整数。
    提示:仔细考虑所有可能的输入案例。如果你想要一个挑战,请不要在下面看到,问自己什么是可能的输入案例。
    注意:这个问题的目的是模糊地指定(即没有给定的输入规范)。您有责任收集所有的输入要求。

    atoi的要求:
    该函数首先丢弃尽可能多的空格字符,直到找到第一个非空格字符。然后,从该字符开始,选择一个可选的初始加号或减号,后跟尽可能多的数字,并将其解释为数值。
    该字符串可以包含形成整数之后的其他字符,这些字符将被忽略,并且不影响此函数的行为。
    如果str中的第一个非空白字符序列不是有效的整数,或者由于str为空或仅包含空格字符,否则不存在此类序列,则不进行转换。
    如果不能执行有效的转换,则返回零值。如果正确的值超出可表示值的范围,则返回INT_MAX(2147483647)或INT_MIN(-2147483648)。

    Hints

    Related Topics: Math, String

    代码

    Java

    class Solution {
        public int myAtoi(String str) {
            int sign = 1;
            int base = 0;
            int i = 0;
            int INT_MAX = 2147483647;
            int INT_MIN = -2147483648;
            if(str.length()==0) return 0;
            while(str.charAt(i)==' ')   i++;
            if(str.charAt(i)=='+'||str.charAt(i)=='-'){
                sign = str.charAt(i++)=='+'?1:-1;
            }
            while(i<str.length()&&str.charAt(i)<='9'&&str.charAt(i)>='0'){
                if(base > INT_MAX/10||(base==INT_MAX/10 && (str.charAt(i)-'0')>7)){
                    if(sign==1) return INT_MAX;
                    else    return INT_MIN;
                }
                base = 10*base + (str.charAt(i++)-'0');
            }
            return base*sign;
        }
    }
    
    

    Python

    class Solution(object):
        def myAtoi(self, str):
            """
            :type str: str
            :rtype: int
            """
            i = base = 0
            sign = 1
            INT_MAX = 2147483647
            INT_MIN = -2147483648
            if len(str)==0:
                return 0
            while str[i]==' ':
                i += 1
            if str[i]=='-' or str[i]=='+':
                sign = 1 if str[i]=='+' else -1
                i += 1
            while i<len(str) and str[i]<='9' and str[i]>='0':
                if base > INT_MAX/10 or (base==INT_MAX/10 and int(str[i])>7):
                    if sign==1:return INT_MAX
                    else: return INT_MIN
                base = 10*base + int(str[i])
                i += 1
            return base*sign
            
    class Solution:
        def myAtoi(self, str):
            str = str.strip()
            if len(str) == 0:
                return 0
            tmp = "0"
            result = 0
            i = 0
            if str[0] in "+-":
                tmp = str[0]
                i = 1
            MAX_INT = 2147483647
            MIN_INT = -2147483648
            for i in xrange(i, len(str)):
                if str[i].isdigit():
                    tmp += str[i]
                else:
                    break
            if len(tmp) > 1:
                result = int(tmp)
            if result > MAX_INT > 0:
                return MAX_INT
            elif result < MIN_INT < 0:
                return MIN_INT
            else:
                return result
    
  • 相关阅读:
    WinForm开发中几种找控件的方法
    C#读取Excel文件时提示:无法指出的错误
    数据库中取随机记录的方法
    C#写数据到Excel
    从数据库导出数据到word、excel、.txt
    Telerik RadTreeView查寻值的方法
    如何导出WinForm 控件界面的矢量图
    简单数据缓存类(c#)
    Windows Installer 清理实用工具说明
    硬盘安装Win7全攻略
  • 原文地址:https://www.cnblogs.com/cookielbsc/p/7428946.html
Copyright © 2020-2023  润新知