65. Valid Number
Given a string s, return whether s is a valid number.
For example, all the following are valid numbers: "2", "0089", "-0.1", "+3.14", "4.", "-.9", "2e10", "-90E3", "3e+7", "+6e-1", "53.5e93", "-123.456e789", while the following are not valid numbers: "abc", "1a", "1e", "e3", "99e2.5", "--6", "-+3", "95a54e53".
Formally, a valid number is defined using one of the following definitions:
- An integer number followed by an optional exponent.
- A decimal number followed by an optional exponent.
An integer number is defined with an optional sign '-' or '+' followed by digits.
A decimal number is defined with an optional sign '-' or '+' followed by one of the following definitions:
- Digits followed by a dot
'.'. - Digits followed by a dot
'.'followed by digits. - A dot
'.'followed by digits.
An exponent is defined with an exponent notation 'e' or 'E' followed by an integer number.
The digits are defined as one or more digits.
Example 1:
Input: s = "0"
Output: true
Example 2:
Input: s = "e"
Output: false
Example 3:
Input: s = "."
Output: false
Constraints:
1 <= s.length <= 20sconsists of only English letters (both uppercase and lowercase), digits (0-9), plus'+', minus'-', or dot'.'.
Runtime: 0 ms, Beats: 100%
Memory: 7.98 MB, Beats: 98.61%
class Solution {
public:
bool isNumber(string s) {
//int length=s.size();
bool sign1=false;
bool sign2=false;
bool exp=false;
bool dot=false;
int num1=false;
int num2=false;
int num3=false;
int leng=s.length();
for (int i=0;i<leng;i++)
{
switch (s[i])
{
case '+':
case '-':
if (sign2) return false;
else if (sign1)
{
if (!exp) return false;
else {
if (num2) return false;
else {
if (sign2) return false;
else
{
sign2=true;
continue;
}
}
}
}
else {
if (dot|num1)
{
return false;
}
else
{
sign1=true;
continue;
}
}
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
if (num2)
{
num2++;
continue;
}
else
{
if (exp)
{
num2++;
sign2=true;
continue;
}
else
{
if (num1)
{
if (!dot)
{
num1++;
continue;
}
else
{
num3++;
continue;
}
}
else
{
num1++;
sign1=true;
if (dot) num3++;
continue;
}
}
}
break;
case '.':
if (num2) return false;
else if (exp) return false;
else if (dot) return false;
else if (num1)
{
num1++;
dot=true;
continue;
}
else
{
sign1=true;
dot=true;
continue;
}
break;
case 'e':
case 'E':
if (exp) return false;
else
{
if (num1)
{
exp=true;
continue;
}
else
{
return false;
}
}
break;
default:
return false;
break;
}
}
if (num2) return true;
if (exp) return false;
if (dot)
{
if (num3) return true;
else
{
if (num1) return true;
else return false;
}
}
if (num1) return true;
else return false;
}
};