LeetCode——8. 字符串转换整数 (atoi)

题目链接
思路:分两个部分:
第一个部分:通过while循环找到第一个有效的数字开始的位置
考虑判断的顺序:
1.前导空格
2.正负号+,-
3.前导零
4.开始读
5.读到非数字字符,直接返回0
注意:
1.前导空格只能出现在±,首位0,数字1-9之前
2.+,-号智能出现在首位0,数字1-9之前;并且只能出现一次
因此,当出现了+、-、或者0-9的数字后,用bool f = true进行标记,表示前导空格和+、-号不能再出现了
第二个部分:通过for循环形成我们要输出的整数
考虑:
1.所形成的数大于int范围(-2147483648,2147483647),直接返回2147483647或2147483647
(这个地方和LeetCode第7题很相似,题目链接
2.出现其他字符时直接返回0
3.用int flag标识正负数,初始化flag = 1,若出现了-,flag=-1,后面形成的数字都要*flag;

class Solution
{
public:
    int myAtoi(string s)
    {   
        int k = 0;
        int ans = 0;
        int flag = 1;
        bool f = false;
        while (1)
        {
            if (s[k] == ' ' && f == false)
                ;
            else if (s[k] == '+' && f == false)
            {
                flag = 1;
                f = true;
            }
            else if (s[k] == '-' && f == false)
            {
                flag = -1;
                f = true;
            }
            else if (s[k] == '0')
            {
                f = true;
                if (s[k] == '0')
                    ;
                else if (s[k] >= '1' && s[k] <= '9')
                    break;
            }
            else if (s[k] >= '1' && s[k] <= '9')
                break;
            else
                return ans;
            k++;
        }
        for (int i = k; i < s.length(); i++)
        {
            if (s[i] >= '0' && s[i] <= '9')
            {
                if (ans > 214748364 || (ans == 214748364 && s[i] > '7'))
                    return 2147483647;
                if (ans < -214748364 || (ans == -214748364 && s[i] > '8'))
                    return -2147483648;
                ans = ans * 10 + (s[i] - '0') * flag;
            }
            else
                break;
        }
        return ans;
    }
};

上一篇:【leetcode】8. 字符串转换整数 (atoi)(Java)


下一篇:开源项目Git地址