首页 » 编程之美 » 正文

[leetcode_65]Valid Number

这个题判断一个数是否为数,不过输入样例太扯。。。或许是自己太水,我的定义和样例的定义不一样,改了好久,难怪这个题的AC率这么低。

class Solution {
public:
    bool isNumber(const char *s) {
        string str = "";
        int len = strlen(s);
        int i = 0;
        for(;i < len;i++) {
            if(s[i] == ' ')continue;
            else break;
        }
        for(;i < len;i++) {
            str.push_back(s[i]);
        }
        for(int i = str.length()-1;i >= 0;i--) {
            if(str[i] == ' ') {
                str.erase(i);
            }
            else
                break;
        }
        return isNumberString(str);
    }
private:
    bool isNumberString(string s) {
        //是否有正负号
        //是否带小数点
        //是否含e
        //是否有前置0
        int len = s.length();
        if(len <= 0)return false;
        if(len == 1) {
            if(s[0] < '0' || s[0] > '9')return false;
            else return true;
        }
        int start = 0;
        if(s[0] == '+' || s[0] == '-') {
            start = 1;<br />
        }
        bool isZeroAllowed = true;
        bool isPotAllowed = false;
        bool isEallowed = false;</p>

<pre><code>    bool once = true;


    if(s[start] == '.') {
        if(len &amp;gt;= start + 2) {
            if(s[start + 1] &amp;gt;= '0' &amp;amp;&amp;amp; s[start + 1] &amp;lt;= '9') {
                isZeroAllowed = true;
                isPotAllowed = false;
                isEallowed = true;
                once = false;
                start = start + 2;  
            }
            else
                return false;
        }
        else 
            return false;
    }
    for(int i = start;i &amp;lt; len;i++) {
        if(s[i] == '.' &amp;amp;&amp;amp; isPotAllowed == false) {
            return false;
        }
        if(s[i] == '.' &amp;amp;&amp;amp; isPotAllowed == true) {
            isPotAllowed = false;
            continue;
        }
        if(s[i] == 'e' &amp;amp;&amp;amp; isEallowed == false) {
            return false;
        }
        if(s[i] == 'e' &amp;amp;&amp;amp; isEallowed == true) {
            isEallowed = false;
            isPotAllowed = false;
            once = false;
            if(i + 1 &amp;gt;= len)return false;
            if(s[i+1] == '-' || s[i+1] == '+') {
                if(i+2 &amp;gt;= len)return false;
                if(s[i+2] &amp;lt; '0' || s[i+2] &amp;gt; '9')return false;
                i+=2;
                continue;
            } 
            if(s[i+1] &amp;lt; '0' || s[i+1] &amp;gt; '9')return false;
            continue;
        }
        if(s[i] &amp;gt;= '0' &amp;amp;&amp;amp; s[i] &amp;lt;= '9') {
            if(once == true) {
                isZeroAllowed = true;
                isPotAllowed = true;
                isEallowed = true;

                once = false;
            }
            continue;
        }
        return false;
    }
    return true;
}
</code></pre>

<p>};

发表评论