码迷,mamicode.com
首页 > 其他好文 > 详细

【剑指offer】【模拟题】67.把字符串转换成整数

时间:2020-05-31 11:01:35      阅读:51      评论:0      收藏:0      [点我收藏+]

标签:com   problems   ems   情况   遍历   rto   public   amp   ref   

题目链接:https://leetcode-cn.com/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof/
应该先去除字符串首部的空格,然后再判断正负。

难点在于处理溢出。
INT_MAX 2147483647
INT_MIN -2147483648

  1. 如果样例中没有超出longlong范围的,可以直接最后判断一下是否超出INT_MAX 和INT_MIN,遍历过程中不用判断(实现一)
  2. 如果longlong都超出,那就需要遍历过程中进行判断。更严谨(实现2)
    第一种 当前number 比 INT_MAX / 10 都大,肯定溢出
    第二种情况 当前number == INT_MAX / 10 并且 接下来要加数字x > INT_MAX的个位数 7,也溢出

实现1

class Solution {
public:
    int strToInt(string str) {
        long long number = 0;
        bool is_minus = false;
        int k = 0;
        while (k < str.size() && str[k] == ‘ ‘) k ++ ;
        if (str[k] == ‘+‘) k ++ ;
        else if (str[k] == ‘-‘) is_minus = true, k ++ ;
        while (k < str.size() && str[k] >= ‘0‘ && str[k] <= ‘9‘) {
            number = number * 10 + str[k] - ‘0‘;
            k ++ ;
        }
        if (is_minus) number *= -1;
        if (number > INT_MAX) number = INT_MAX;
        if (number < INT_MIN) number = INT_MIN;
        return (int)number;
    }
};

实现2

class Solution {
public:
    int strToInt(string str) {
        int number = 0; 
        //是否是负数
        bool is_minus = false;  
        int k = 0;
        //去除首部的空格
        while (k < str.size() && str[k] == ‘ ‘) k ++ ;
        
        //跳过符号位
        if (str[k] == ‘+‘) k ++ ;
        else if (str[k] == ‘-‘) is_minus = true, k ++ ;

        //依次遍历每个字符 判断每个字符是不是数字0 - 9 
        while (k < str.size() && str[k] >= ‘0‘ && str[k] <= ‘9‘) 
        {
            int x = str[k] - ‘0‘;
            //判断是否越界
            if(number > INT_MAX / 10 || (number == INT_MAX / 10 && x > INT_MAX % 10)) return is_minus ? INT_MIN : INT_MAX;
            number = number * 10 + x;
            k ++ ;
        }
       
        return is_minus ? -number : number;
    }
};

【剑指offer】【模拟题】67.把字符串转换成整数

标签:com   problems   ems   情况   遍历   rto   public   amp   ref   

原文地址:https://www.cnblogs.com/Trevo/p/12995382.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!