您的位置:首页 > 其它

LeetCode 65 Valid Number

2017-05-31 19:34 465 查看
题意:

给定一个字符串,判断它是不是一个数字。

思路:

首先要把字符串头尾的空格去掉。

接着可以分2种数字表示方法讨论,1.普通写法 2.科学计数法。

普通写法判断依据为,一定要有数字出现,一定没有0123456789+-.之外的字符出现,对于+-只能出现在第一位或者不出现,对于.如果是浮点数的话只能出现一次。

注意.3表示0.3,3.表示3.0,都是合法的,但是.不能表示0.0,所以不合法。

科学计数法判断依据为,从e处分割判断,前面是一个普通写法的浮点数或整数,后面是一个普通写法的整数。

代码:

class Solution {
public:
bool isNumber(string s) {
s.erase(0, s.find_first_not_of(" "));
s.erase(s.find_last_not_of(" ") + 1);
int pos = s.find("e");
if (pos == -1) {
return isFloat(s);
}
return isFloat(s.substr(0, pos)) && isInt(s.substr(pos + 1));
}

private:
bool isFloat(string s) {
int n = s.size();
if (n == 0) {
return false;
}
bool point = false;
bool number = false;
for (int i = 0; i < n; ++i) {
if (s[i] >= '0' && s[i] <= '9') {
number = true;
} else if (s[i] == '+' || s[i] == '-') {
if (i != 0) {
return false;
}
} else if (s[i] == '.') {
if (point) {
return false;
}
point = true;
} else {
return false;
}
}
return number;
}

bool isInt(string s) {
int n = s.size();
if (n == 0) {
return false;
}
bool number = false;
for (int i = 0; i < n; ++i) {
if (s[i] >= '0' && s[i] <= '9') {
number = true;
} else if (s[i] == '+' || s[i] == '-') {
if (i != 0) {
return false;
}
} else {
return false;
}
}
return number;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: