Skip to content

Commit c7d6865

Browse files
committed
Sync LeetCode submission Runtime - 0 ms (100.00%), Memory - 17.7 MB (23.23%)
1 parent f4c642c commit c7d6865

File tree

2 files changed

+89
-0
lines changed

2 files changed

+89
-0
lines changed

0065-valid-number/README.md

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
<p>Given a string <code>s</code>, return whether <code>s</code> is a <strong>valid number</strong>.<br />
2+
<br />
3+
For example, all the following are valid numbers: <code>&quot;2&quot;, &quot;0089&quot;, &quot;-0.1&quot;, &quot;+3.14&quot;, &quot;4.&quot;, &quot;-.9&quot;, &quot;2e10&quot;, &quot;-90E3&quot;, &quot;3e+7&quot;, &quot;+6e-1&quot;, &quot;53.5e93&quot;, &quot;-123.456e789&quot;</code>, while the following are not valid numbers: <code>&quot;abc&quot;, &quot;1a&quot;, &quot;1e&quot;, &quot;e3&quot;, &quot;99e2.5&quot;, &quot;--6&quot;, &quot;-+3&quot;, &quot;95a54e53&quot;</code>.</p>
4+
5+
<p>Formally, a&nbsp;<strong>valid number</strong> is defined using one of the following definitions:</p>
6+
7+
<ol>
8+
<li>An <strong>integer number</strong> followed by an <strong>optional exponent</strong>.</li>
9+
<li>A <strong>decimal number</strong> followed by an <strong>optional exponent</strong>.</li>
10+
</ol>
11+
12+
<p>An <strong>integer number</strong> is defined with an <strong>optional sign</strong> <code>&#39;-&#39;</code> or <code>&#39;+&#39;</code> followed by <strong>digits</strong>.</p>
13+
14+
<p>A <strong>decimal number</strong> is defined with an <strong>optional sign</strong> <code>&#39;-&#39;</code> or <code>&#39;+&#39;</code> followed by one of the following definitions:</p>
15+
16+
<ol>
17+
<li><strong>Digits</strong> followed by a <strong>dot</strong> <code>&#39;.&#39;</code>.</li>
18+
<li><strong>Digits</strong> followed by a <strong>dot</strong> <code>&#39;.&#39;</code> followed by <strong>digits</strong>.</li>
19+
<li>A <strong>dot</strong> <code>&#39;.&#39;</code> followed by <strong>digits</strong>.</li>
20+
</ol>
21+
22+
<p>An <strong>exponent</strong> is defined with an <strong>exponent notation</strong> <code>&#39;e&#39;</code> or <code>&#39;E&#39;</code> followed by an <strong>integer number</strong>.</p>
23+
24+
<p>The <strong>digits</strong> are defined as one or more digits.</p>
25+
26+
<p>&nbsp;</p>
27+
<p><strong class="example">Example 1:</strong></p>
28+
29+
<div class="example-block">
30+
<p><strong>Input:</strong> <span class="example-io">s = &quot;0&quot;</span></p>
31+
32+
<p><strong>Output:</strong> <span class="example-io">true</span></p>
33+
</div>
34+
35+
<p><strong class="example">Example 2:</strong></p>
36+
37+
<div class="example-block">
38+
<p><strong>Input:</strong> <span class="example-io">s = &quot;e&quot;</span></p>
39+
40+
<p><strong>Output:</strong> <span class="example-io">false</span></p>
41+
</div>
42+
43+
<p><strong class="example">Example 3:</strong></p>
44+
45+
<div class="example-block">
46+
<p><strong>Input:</strong> <span class="example-io">s = &quot;.&quot;</span></p>
47+
48+
<p><strong>Output:</strong> <span class="example-io">false</span></p>
49+
</div>
50+
51+
<p>&nbsp;</p>
52+
<p><strong>Constraints:</strong></p>
53+
54+
<ul>
55+
<li><code>1 &lt;= s.length &lt;= 20</code></li>
56+
<li><code>s</code> consists of only English letters (both uppercase and lowercase), digits (<code>0-9</code>), plus <code>&#39;+&#39;</code>, minus <code>&#39;-&#39;</code>, or dot <code>&#39;.&#39;</code>.</li>
57+
</ul>

0065-valid-number/solution.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Approach 1: Follow The Rules!
2+
3+
# Time: O(n)
4+
# Space: O(1)
5+
6+
class Solution:
7+
def isNumber(self, s: str) -> bool:
8+
seen_digit = seen_exponent = seen_dot = False
9+
10+
for i, c in enumerate(s):
11+
if c.isdigit():
12+
seen_digit = True
13+
elif c in ['+', '-']:
14+
if i > 0 and s[i - 1] not in ['e', 'E']:
15+
return False
16+
elif c in ['e', 'E']:
17+
if seen_exponent or not seen_digit:
18+
return False
19+
seen_exponent = True
20+
seen_digit = False
21+
elif c == '.':
22+
if seen_dot or seen_exponent:
23+
return False
24+
seen_dot = True
25+
26+
# Invalid character
27+
else:
28+
return False
29+
30+
# Must have at least one number and number after 'e'/'E' if exists
31+
return seen_digit
32+

0 commit comments

Comments
 (0)