leetcode - Valid Number

来源:互联网 发布:网络传奇游戏排行榜 编辑:程序博客网 时间:2024/06/11 14:45

题目:

Valid Number

Validate if a given string is numeric.

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



class Solution {public:bool isNumber(string s) {if (s.empty())return false;//删除开头和结尾的空格//删除开头空格if (s[0] == ' '){int i = 1;while (i<s.size() && s[i] == ' ')++i;s.erase(s.begin(), s.begin() + i);}//删完开头空格后若为空,则返回假if (s.empty())return false;int size = s.size();//删除结尾空格if (s[size - 1] == ' '){int i = size - 2;while (i >= 0 && s[i] == ' ')--i;if (i<0)return false;s.erase(s.begin() + i + 1, s.end());}//删除结尾空格后,若为空或以'e'开头,返回假if (s.empty() || s[0] == 'e' || s[0] == 'E')return false;//若仍然有空格,返回假if (s.find(" ") != string::npos)return false;size = s.size();int index = 0;if (s[index] == '+' || s[index] == '-')++index;//只有加减号,返回假if (index == size)return false;//若第一个小数点前有数字,docbeforenum为真bool docbeforenum = false;if (s[index] >= '0' && s[index] <= '9')docbeforenum = true;scanNumber(s, index);//一个整数,返回真if (index == size)return true;bool res = true;//小数if (s[index] == '.'){++index;//'.'是字符串最后一位时,'.'前有数字则返回真,否则返回假if (index == size){return docbeforenum;}//'.'后紧跟着非数字时if (s[index]<'0' || s[index]>'9'){if ((s[index] == 'e' || s[index] == 'E') && docbeforenum){// “数字.e” 的形式,继续判断}elsereturn false;}scanNumber(s, index);//小数的形式,返回真if (index == size)return true;if (s[index] == 'e' || s[index] == 'E')res = isExp(s, index);}else if (s[index] == 'e' || s[index] == 'E'){// 'e'前没有数字,返回假if (docbeforenum == false)return false;res = isExp(s, index);}elseres = false;return res && s[index] == '\0';}//遇到数字则往后走void scanNumber(const string &s, int &index){int size = s.size();while (index<size && s[index] >= '0' && s[index] <= '9')++index;}//判断以'e'开头的字符串是否能代表指数bool isExp(const string &s, int &index){++index;int size = s.size();//只有一个'e',返回假if (index == size)return false;if (s[index] == '+' || s[index] == '-')++index;//'e'后没有数字,返回假if (index == size || s[index]<'0' || s[index]>'9')return false;scanNumber(s, index);return true;}};


0 0