【leetcode刷题笔记】008.String to Integer (atoi)

日期:20180912
题目描述:

Implement atoi which converts a string to an integer.

The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from this character, takes an optional initial plus or minus sign followed by as many numerical digits as possible, and interprets them as a numerical value.

The string can contain additional characters after those that form the integral number, which are ignored and have no effect on the behavior of this function.

If the first sequence of non-whitespace characters in str is not a valid integral number, or if no such sequence exists because either str is empty or it contains only whitespace characters, no conversion is performed.

If no valid conversion could be performed, a zero value is returned.

Note:

  • Only the space character ' ' is considered as whitespace character.
  • Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. If the numerical value is out of the range of representable values, INT_MAX (231 − 1) or INT_MIN (−231) is returned.

Example 1:

Input: "42"
Output: 42

Example 2:

Input: "   -42"
Output: -42
Explanation: The first non-whitespace character is '-', which is the minus sign.
             Then take as many numerical digits as possible, which gets 42.

Example 3:

Input: "4193 with words"
Output: 4193
Explanation: Conversion stops at digit '3' as the next character is not a numerical digit.

Example 4:

Input: "words and 987"
Output: 0
Explanation: The first non-whitespace character is 'w', which is not a numerical 
             digit or a +/- sign. Therefore no valid conversion could be performed.

Example 5:

Input: "-91283472332"
Output: -2147483648
Explanation: The number "-91283472332" is out of the range of a 32-bit signed integer.
             Thefore INT_MIN (−231) is returned.

详解:

这次居然一次写完直接通过,都没有debug,还击败了96.78%的人,于是我得出一个结论:

经过了这么久的练习,我终于

遇到了一道简单的题。

class Solution {
public:
    int myAtoi(string str) {
        long long int x = 0,tx = 0;
        bool isneg = false;
        int i = 0;
        while(str[i]==' '){
            i++;
        }
        if(str[i]=='-'||str[i]=='+'||(str[i]>='0'&&str[i]<='9')){
            if(str[i]=='-'){
                isneg = true;
                i++;
            }else if(str[i]=='+'){
                i++;
            }
            while(str[i]>='0'&&str[i]<='9'){
                x *= 10;
                x += str[i] - '0';
                if(isneg){
                    tx = -x;
                }else{
                    tx = x;
                }
                if(tx>2147483647){
                    return 2147483647;
                }
                if(tx<-2147483648){
                    return -2147483648;
                }
                i++;
            }
            int res = tx;
            return res;
        }else{
            return 0;
        }
    }
};

做法和简单粗暴,依然用long long int来保存真实值,在写代码的时候确实可以简单粗暴的不停的if,即把所有的情况一一写出来,这样虽然代码很长,但是运行速度不会慢,甚至更快,而且可读性一般也不会差。

高度凝练的代码需要千锤百炼才能写出,笔试时往往受时间的限制不适合这么做,并且高度凝练的代码往往可读性不会太好。

你可能感兴趣的:(【leetcode刷题笔记】008.String to Integer (atoi))