Created
July 20, 2022 14:50
-
-
Save phatnguyenuit/27b5f9abba8cf4ba8914d09821b4ae04 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
A valid number can be split up into these components (in order): | |
- A decimal number or an integer. | |
- (Optional) An 'e' or 'E', followed by an integer. | |
=> A decimal number can be split up into these components (in order): | |
-> (Optional) A sign character (either '+' or '-'). | |
-> One of the following formats: | |
- One or more digits, followed by a dot '.'. | |
- One or more digits, followed by a dot '.', followed by one or more digits. | |
- A dot '.', followed by one or more digits. | |
=> An integer can be split up into these components (in order): | |
-> (Optional) A sign character (either '+' or '-'). | |
-> One or more digits. | |
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"]. | |
Given a string s, return true if s is a valid number. | |
isValidNumber("2") => true | |
isValidNumber("2ac") => false | |
*/ | |
function isSignCharacter(char) { | |
return char === "+" || char === "-"; | |
} | |
function isAlphabetCharacter(char) {} | |
/** | |
* @param {string} s | |
* @return {boolean} | |
*/ | |
function isValidNumber(s) { | |
// YOUR CODE HERE | |
// DON'T FORGET TO RETURN BOOLEAN VALUE | |
// 1BAC -> 1bac | |
const lowerCaseStr = s.toLowerCase(); | |
const loopedSigns = []; | |
for (let i = 0; i < lowerCaseStr.length; i++) { | |
// case start with e | |
if (lowerCaseStr[i] == "e" && i == 0) { | |
return false; | |
} | |
// case end with e | |
if (lowerCaseStr[i] == "e" && i == lowerCaseStr.length - 1) { | |
return false; | |
} | |
if (lowerCaseStr[i] === "-" || lowerCaseStr[i] === "+") { | |
loopedSigns.push(lowerCaseStr[i]); | |
} | |
if (loopedSigns.length > 1) { | |
return false; | |
} | |
if (i > 0 && loopedSigns.length > 0) { | |
// case --, ++, -+, +- | |
if ( | |
isSignCharacter(lowerCaseStr[i]) && | |
isSignCharacter(lowerCaseStr[i - 1]) | |
) { | |
return false; | |
} | |
} | |
} | |
return true; | |
} | |
// console.log( | |
// "isValidNumber -> true", | |
// [ | |
// "2", | |
// "0089", | |
// "-0.1", | |
// "+3.14", | |
// "4.", | |
// "-.9", | |
// "2e10", | |
// "-90E3", | |
// "3e+7", | |
// "+6e-1", | |
// "53.5e93", | |
// "-123.456e789", | |
// ].map(isValidNumber) | |
// ); | |
console.log( | |
"isValidNumber -> false", | |
["1e", "e3", "--6", "-+3", "abc", "1a", "99e2.5", "95a54e53"].map( | |
isValidNumber | |
) | |
); | |
// start with "e" | |
// end with "e" | |
// double signs (--, ++, -+, +-) | |
// start with a-z | |
// end with with a-z | |
// after "e", char is "." | |
// having any a-z char in the middle |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment