剑指 Offer 67 把字符串转换成整数

标签: 剑指 Offer 发布于:2022-02-28 11:22:46 编辑于:2022-02-28 11:23:14 浏览量:882

概述

https://leetcode-cn.com/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof/

https://leetcode.com/problems/string-to-integer-atoi/

有一道让你判断字符串是否是合法数字的题目跟这个很像。

解法

实现的时候要注意,INT_MIN 的绝对值要比 INT_MAX 多一,这导致其不能用 int 来存。

另外 while 循环那里如果发现已经超出 INT_MAX + 1,立刻返回 INT_MAX + 1 就好。

还有就是下面的 INT_MAX 因为后面有 + 1,所以必须将其转换到范围更大的类型。

class Solution {
public:
    int myAtoi(string s) {
        bool positive = true;
        int i = 0;
        while (s[i] == ' ') i ++;
        if (s[i] == '+') {
            i ++;
        } else if (s[i] == '-') {
            i ++;
            positive = false;
        }
        long n = 0;
        while (isdigit(s[i])) {
            n *= 10;
            if (n >= long(INT_MAX) + 1) {
                n = long(INT_MAX) + 1;
                break;
            }
            n += s[i] - '0';
            i ++;
        }
        if (positive) {
            return min(n, long(INT_MAX));
        } else {
            if (n >= long(INT_MAX) + 1) {
                return INT_MIN;
            } else {
                return - int(n);
            }
        }
    }
};

未经允许,禁止转载,本文源站链接:https://iamazing.cn/