Skip to content

Commit 3d37ebf

Browse files
authored
Improved task 65.
1 parent c67b043 commit 3d37ebf

File tree

2 files changed

+37
-41
lines changed

2 files changed

+37
-41
lines changed

src/main/java/g0001_0100/s0065_valid_number/Solution.java

Lines changed: 31 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,49 +2,41 @@
22

33
public class Solution {
44
public boolean isNumber(String s) {
5-
// Variables
6-
boolean seenDigit = false;
7-
boolean seenExponent = false;
8-
boolean seenDot = false;
5+
6+
if (s == null || s.length() == 0) {
7+
return false;
8+
}
9+
10+
boolean eSeen = false;
11+
boolean numberSeen = false;
12+
boolean decimalSeen = false;
13+
914
for (int i = 0; i < s.length(); i++) {
10-
char ch = s.charAt(i);
11-
if (Character.isDigit(ch)) {
12-
seenDigit = true;
13-
} else {
14-
// Check Exponent logic
15-
if (ch == 'e' || ch == 'E') {
16-
// Should have seen at least one digit before
17-
// Shouldn't see exponent > 1 time
18-
if (seenDigit && !seenExponent) {
19-
seenExponent = true;
20-
// Reset seenDigit because at least one digit should come after seeing
21-
// exponent
22-
// Return statement is returning seenDigit flag
23-
seenDigit = false;
24-
} else {
25-
return false;
26-
}
27-
} else if (ch == '.') {
28-
// Validate there is only one dot
29-
// Shouldn't have seen dot before as there can be only one
30-
// Shouldn't have see exponent before
31-
if (seenDot || seenExponent) {
32-
return false;
33-
} else {
34-
seenDot = true;
35-
}
36-
} else if (ch == '+' || ch == '-') {
37-
// Validate sign coming at 0th position or after e/E
38-
// Sign can only come at starting or after e
39-
// That's the reason sign check do at the end
40-
if (!(i == 0 || s.charAt(i - 1) == 'e' || s.charAt(i - 1) == 'E')) {
41-
return false;
42-
}
43-
} else {
15+
char c = s.charAt(i);
16+
if (c >= 48 && c <= 57) {
17+
numberSeen = true;
18+
} else if (c == '+' || c == '-') {
19+
if (i == s.length() - 1
20+
|| (i != 0 && s.charAt(i - 1) != 'e' && s.charAt(i - 1) != 'E')) {
21+
return false;
22+
}
23+
} else if (c == '.') {
24+
if (eSeen || decimalSeen) {
4425
return false;
4526
}
27+
28+
decimalSeen = true;
29+
} else if (c == 'e' || c == 'E') {
30+
if (i == s.length() - 1 || eSeen || !numberSeen) {
31+
return false;
32+
}
33+
34+
eSeen = true;
35+
} else {
36+
return false;
4637
}
4738
}
48-
return seenDigit;
39+
40+
return numberSeen;
4941
}
5042
}

src/test/java/g0001_0100/s0065_valid_number/SolutionTest.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@
77

88
public class SolutionTest {
99
@Test
10-
public void validNumber() {
11-
assertThat(new Solution().isNumber("0"), equalTo(true));
10+
public void isNumber() {
11+
Solution solution = new Solution();
12+
assertThat(solution.isNumber("0"), equalTo(true));
13+
assertThat(solution.isNumber("e"), equalTo(false));
14+
assertThat(solution.isNumber("."), equalTo(false));
15+
assertThat(solution.isNumber(".1"), equalTo(true));
1216
}
1317
}

0 commit comments

Comments
 (0)