leetcode 8 字符串转整数

Posted 苛性氢

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 8 字符串转整数相关的知识,希望对你有一定的参考价值。

class Solution {
public:
    int myAtoi(string str) {
        int sign=0;
        int firstNonSpace;
        int lastNonSpace;
        
        for(firstNonSpace=0;firstNonSpace<str.size();firstNonSpace++){
            if(str[firstNonSpace]!=\' \'){
                break;
            }
        }
        if(firstNonSpace==str.size()){
            return 0;
        }
        else{
            if(str[firstNonSpace]==\'+\'){
                firstNonSpace++;
            }
            else if(str[firstNonSpace]==\'-\'){
                sign=1;
                firstNonSpace++;
            }
            if(firstNonSpace==str.size()){
                return 0;
            }
            if((str[firstNonSpace]<\'0\')||(str[firstNonSpace]>\'9\')){
               return 0; 
            }
            
            for(lastNonSpace=firstNonSpace;lastNonSpace<str.size();){
                if((str[lastNonSpace]>=\'0\')&&(str[lastNonSpace]<=\'9\')){
                    lastNonSpace++;
                }
                else{
                    break;
                }
            }
            if(lastNonSpace-firstNonSpace>10){
                if(sign==0){
                    return INT_MAX;
                }
                else{
                    return INT_MIN;
                }
            }
            if(lastNonSpace-firstNonSpace==10){
                if(sign==0&&str.substr(firstNonSpace,lastNonSpace-firstNonSpace)>="2147483647"){
                    return INT_MAX;
                }
                else if(sign==1&&str.substr(firstNonSpace,lastNonSpace-firstNonSpace)>="2147483648"){
                    return INT_MIN;
                }
            }
            int result=0;
                for(int i=firstNonSpace;i<lastNonSpace;i++){
                    result=(str[i]-\'0\')+result*10;
                }
                if(sign==0){
                    return result;
                }
            else{
                return -result;
            }
        }
    }
};

击败30%。

然后我今天又交了一次,没过。

" 0000000000012345678"

 

 

 

别人的代码:

class Solution {
public:
    int myAtoi(string str) {
        if (str.empty()) return 0;
        int sign = 1, base = 0, i = 0, n = str.size();
        while (i < n && str[i] == \' \') ++i;
        if (str[i] == \'+\' || str[i] == \'-\') {
            sign = (str[i++] == \'+\') ? 1 : -1;
        }
        while (i < n && str[i] >= \'0\' && str[i] <= \'9\') {
            if (base > INT_MAX / 10 || (base == INT_MAX / 10 && str[i] - \'0\' > 7)) {
                return (sign == 1) ? INT_MAX : INT_MIN;
            }
            base = 10 * base + (str[i++] - \'0\');
        }
        return base * sign;
    }
};

来自:http://www.cnblogs.com/grandyang/p/4125537.html

以上是关于leetcode 8 字符串转整数的主要内容,如果未能解决你的问题,请参考以下文章

8. 字符串转整数(实现atoi函数) [leetcode 8: String to Integer (atoi)]

Leetcode题解....ing python

leetcode-13.罗马数字转整数

LeetCode题解索引

[leetcode] 12. 整数转罗马数字

LeetCode 13. 罗马数字转整数