Skip to content

Instantly share code, notes, and snippets.

@phatnguyenuit
Created July 20, 2022 14:50
Show Gist options
  • Save phatnguyenuit/27b5f9abba8cf4ba8914d09821b4ae04 to your computer and use it in GitHub Desktop.
Save phatnguyenuit/27b5f9abba8cf4ba8914d09821b4ae04 to your computer and use it in GitHub Desktop.
/*
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