题目描述

分析

  • result = 0,为截至目前转换了的数
  • current,这一位的数(str[i])
  1. 忽略字符串开头的" "
  2. 判断" "后第一个字符,不为'+', '-', '0'~'9'则直接return 0,为'-'将sgn置为-1。
  3. result = result * 10 + sgn * current,直到没有数字
  4. 在每次进行第3步前判断是否会溢出
    • 正溢出: (result == 214748364 && current > 7) || result > 214748364
    • 负溢出: (result == -214748364 && current > 8) || result < -214748364

代码

class Solution {
public:
    int myAtoi(string str) {        
        int result = 0, current, i, sgn = 1;
        for(i = 0;i < str.length(); i++){
            if(str[i] != ' ')
                break;
        }
        if(i == str.length()){
            return 0;
        }
        if(str[i] == '-'){
            sgn = -1;
            i++;
        }else if(str[i] == '+'){
            i++;
        }else if((str[i] != '-' && str[i] != '+')&& (str[i] > '9' || str[i] < '0')){
            return 0;
        }
        for(; i < str.length(); i++){
            if(str[i] > '9' || str[i] < '0'){
                break;
            }
            current = str[i] - '0';
            if((result == 214748364 && current > 7)||result > 214748364)
                return 2147483647;
            if((result == -214748364 && current > 8)||result < -214748364)
                return -2147483648;    
            result = 10 * result + sgn * current;
        }
        return result;
    }
};

执行结果

 posted on 2020-04-03 15:13  Nreyab  阅读(86)  评论(0)    收藏  举报