刷题笔记

【leetcode刷题笔记】008.String to Inte

2018-09-13  本文已影响0人  常恒毅
日期: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:

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

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

上一篇下一篇

猜你喜欢

热点阅读