Skip to content

Commit c477514

Browse files
added 65.Valid Number soln
1 parent b107387 commit c477514

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

65.Valid Number.cpp

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
class ValidNumber {
5+
public:
6+
bool isNumber(string s) {
7+
int n = s.size();
8+
int i = 0;
9+
10+
// Remove leading whitespaces
11+
while (i < n && s[i] == ' ') i++;
12+
13+
// Remove trailing whitespaces
14+
int j = n - 1;
15+
while (j >= 0 && s[j] == ' ') j--;
16+
17+
if (i > j) return false;
18+
19+
bool num = false; // At least one digit before e
20+
bool dot = false; // Only one '.'
21+
bool exp = false; // Only one 'e' or 'E'
22+
23+
for (int k = i; k <= j; k++) {
24+
char c = s[k];
25+
26+
if (isdigit(c)) {
27+
num = true;
28+
}
29+
else if (c == '.') {
30+
// Only one '.' and it can't appear after e
31+
if (dot || exp) return false;
32+
dot = true;
33+
}
34+
else if (c == 'e' || c == 'E') {
35+
// e must appear only once and must follow a number
36+
if (exp || !num) return false;
37+
exp = true;
38+
num = false; // Reset, we need digits after e
39+
}
40+
else if (c == '+' || c == '-') {
41+
// Sign must be at start or immediately after e
42+
if (k != i && s[k-1] != 'e' && s[k-1] != 'E')
43+
return false;
44+
}
45+
else {
46+
return false;
47+
}
48+
}
49+
50+
return num;
51+
}
52+
};

0 commit comments

Comments
 (0)