2017年6月21日 星期三

leetcode-8 String to Integer(atoi)

題意:將字串轉為signed int,若不符合格式,返回0,若溢位,返回INT_MAX or INT_MIN


解題思路: 這題也算簡單,就依照題目要求,分類情況,答案就出來了!複雜度為O(n),其中n為字串長度


C++ code如下:
class Solution {
public:
    int myAtoi(string str) {
        int len=str.size();
        long long y=0;
        int ok=0;
        int sign=1;
        for(int i=0;i<len;i++)
        {
            if(str[i]>=58||str[i]<=47)
            {
                if(!ok)
                {
                    if(str[i]=='+')
                        ok=1;
                    else if(str[i]=='-')
                    {
                        ok=1;
                        sign=-1;
                    }
                    else if(str[i]!=' ')    
                        return 0;
                }
                else
                {
                    if(sign*y>INT_MAX)
                        return sign*INT_MAX;
                    else if(sign*y<INT_MIN)
                        return sign*INT_MIN;
                    else
                        return sign*y;
                }
            }
            else
            {
                ok=1;
                y=y*10+str[i]-'0';
                if(sign*y>INT_MAX)
                    return INT_MAX;
                else if(sign*y<INT_MIN)
                    return INT_MIN;
            }
        }
        if(sign*y>INT_MAX)
            return INT_MAX;
        else if(sign*y<INT_MIN)
            return INT_MIN;
        else
            return sign*y;
    }
};

沒有留言:

張貼留言