leetcode 65. Valid Number

来源:互联网 发布:total recall mac 编辑:程序博客网 时间:2024/06/07 08:43

Validate if a given string is numeric.

Some examples:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true

Note: It is intended for the problem statement to be ambiguous. You should gather all requirements up front before implementing one.

Update (2015-02-10):

The signature of the C++ function had been updated. If you still see your function signature accepts a const char * argument, please click the reload button  to reset your code definition.

这个题真的是太难一次ac了。。没有什么技术上的难度,主要是要考虑各种奇葩情况

public class Solution {    public boolean isNumber(String s) {        if(s==null||s.length()==0)return false;        int len = s.length();        boolean posneg = false;        boolean eflag = false;        boolean space = false;        boolean point = false;        int count = 0;        for(int j=0;j<len;j++){            if(s.charAt(j)>'9'||s.charAt(j)<'0')count++;        }        if(count==len)return false;        int i = 0;        while(i<len&&s.charAt(i)==' '){            i++;        }                if(i>=len)return false;        if(i==len-1&&(s.charAt(i)<'0'||s.charAt(i)>'9'))return false;        if ((s.charAt(i)=='+'||s.charAt(i)=='-')){            i++;            posneg = true;            if(s.charAt(i)!='.'&&(s.charAt(i)<'0'||s.charAt(i)>'9'))return false;        }        for(;i<len;i++){            if(s.charAt(i)!=' '&&space){                return false;            }            if(s.charAt(i)==' '){                space = true;                continue;            }            if(s.charAt(i)=='.'){                if(!eflag&&!point){                   if(i==0&&s.charAt(i+1)>='0'&&s.charAt(i+1)<='9'){                        point = true;                        continue;                   }                    if(i==len-1&&s.charAt(i-1)>='0'&&s.charAt(i-1)<='9'){                        point = true;                        continue;                    }                    if(i>0&&i<len-1&&((s.charAt(i-1)>='0'&&s.charAt(i-1)<='9')||(s.charAt(i+1)>='0'&&s.charAt(i+1)<='9'))){                        point = true;                        continue;                    }                }                return false;            }            if(s.charAt(i)>='0'&&s.charAt(i)<='9')continue;            if(s.charAt(i)=='e'&&!eflag&&i!=0&&(s.charAt(i-1)>='0'&&s.charAt(i-1)<='9'||s.charAt(i-1)=='.')&&i!=len-1){                if(s.charAt(i+1)=='+'||s.charAt(i+1)=='-'||(s.charAt(i+1)>='0'&&s.charAt(i+1)<='9')){                    eflag = true;                    continue;                }                else return false;            }            if(s.charAt(i)=='-'||s.charAt(i)=='+'){                if(s.charAt(i-1)=='e'&&i!=len-1)continue;            }            return false;        }        return true;    }}


原创粉丝点击