【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,即把所有的情况一一写出来,这样虽然代码很长,但是运行速度不会慢,甚至更快,而且可读性一般也不会差。

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,449评论 0 10
  • 当消极的情绪产生时,一定要学会去理解并且接纳,而不是用拳头去发泄,要勇于活在当下感受当下的时光。 做真实的自己...
    合肥李风丽阅读 243评论 0 0
  • 我对花倒是没什么大的感觉,当我走在街道上,两旁传来阵阵花香,突然发觉原来已经到春天了。顺着花香走去,温柔的阳光,和...
    桑古美阅读 293评论 1 0