Skip to content

Commit bbb2975

Browse files
committed
Add solution for ValidNumber leetcode task
1 parent 1348da4 commit bbb2975

File tree

2 files changed

+77
-0
lines changed

2 files changed

+77
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package by.andd3dfx.numeric;
2+
3+
/**
4+
* <pre>
5+
* https://leetcode.com/problems/valid-number/description/
6+
*
7+
* A valid number can be split up into these components (in order):
8+
*
9+
* A decimal number or an integer.
10+
* (Optional) An 'e' or 'E', followed by an integer.
11+
*
12+
* A decimal number can be split up into these components (in order):
13+
*
14+
* (Optional) A sign character (either '+' or '-').
15+
* One of the following formats:
16+
* One or more digits, followed by a dot '.'.
17+
* One or more digits, followed by a dot '.', followed by one or more digits.
18+
* A dot '.', followed by one or more digits.
19+
*
20+
* An integer can be split up into these components (in order):
21+
*
22+
* (Optional) A sign character (either '+' or '-').
23+
* One or more digits.
24+
*
25+
* For example, all the following are valid numbers: ["2", "0089", "-0.1", "+3.14", "4.", "-.9", "2e10", "-90E3",
26+
* "3e+7", "+6e-1", "53.5e93", "-123.456e789"], while the following are not valid numbers:
27+
* ["abc", "1a", "1e", "e3", "99e2.5", "--6", "-+3", "95a54e53"].
28+
*
29+
* Given a string s, return true if s is a valid number.
30+
* </pre>
31+
*/
32+
public class ValidNumber {
33+
34+
public static boolean isNumber(String s) {
35+
return s.matches("(\\+|-)?([0-9]+\\.?([0-9]+)?|\\.[0-9]+)((e|E)(\\+|-)?[0-9]+)?");
36+
}
37+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package by.andd3dfx.numeric;
2+
3+
import org.junit.Test;
4+
5+
import static by.andd3dfx.numeric.ValidNumber.isNumber;
6+
import static org.junit.Assert.*;
7+
8+
public class ValidNumberTest {
9+
10+
/**
11+
* For example, all the following are valid numbers:
12+
* ["2", "0089", "-0.1", "+3.14", "4.", "-.9", "2e10", "-90E3", "3e+7", "+6e-1", "53.5e93", "-123.456e789"],
13+
* while the following are not valid numbers:
14+
* ["abc", "1a", "1e", "e3", "99e2.5", "--6", "-+3", "95a54e53"].
15+
*/
16+
@Test
17+
public void testIsNumber() {
18+
assertTrue(isNumber("2"));
19+
assertTrue(isNumber("0089"));
20+
assertTrue(isNumber("-0.1"));
21+
assertTrue(isNumber("+3.14"));
22+
assertTrue(isNumber("4."));
23+
assertTrue(isNumber("-.9"));
24+
assertTrue(isNumber("2e10"));
25+
assertTrue(isNumber("-90E3"));
26+
assertTrue(isNumber("3e+7"));
27+
assertTrue(isNumber("+6e-1"));
28+
assertTrue(isNumber("53.5e93"));
29+
assertTrue(isNumber("-123.456e789"));
30+
31+
assertFalse(isNumber("abc"));
32+
assertFalse(isNumber("1a"));
33+
assertFalse(isNumber("1e"));
34+
assertFalse(isNumber("e3"));
35+
assertFalse(isNumber("99e2.5"));
36+
assertFalse(isNumber("--6"));
37+
assertFalse(isNumber("-+3"));
38+
assertFalse(isNumber("95a54e53"));
39+
}
40+
}

0 commit comments

Comments
 (0)