94. Valid Number
hardAsked at SalesforceDetermine if a string represents a valid number. Salesforce uses this to test edge-case enumeration and finite-state-machine reasoning.
By Sam K., Founder, InterviewChamp.AI · Last verified
Source citations
Public interview reports confirming this problem appears in Salesforce loops.
- Glassdoor (2026-Q1)— Salesforce uses similar validation for numeric field inputs in custom Apex.
- LeetCode Discuss (2025)— Hard for the edge-case enumeration.
Problem
Given a string s, return whether s is a valid number. A valid number can be split into these components: a decimal number (followed optionally by 'e' or 'E' and an integer), or an integer (followed optionally by 'e' or 'E' and an integer). A decimal/integer can be signed. See LeetCode for the full grammar.
Constraints
1 <= s.length <= 20s consists of only English letters, digits (0-9), plus '+', minus '-', or dot '.'.
Examples
Example 1
s = "0"trueExample 2
s = "e"falseExample 3
s = "."falseExample 4
s = "2e10"trueApproaches
1. Regex
Match against a carefully crafted regex.
- Time
- O(n)
- Space
- O(n)
function isNumber(s) {
return /^[+-]?(\d+\.?\d*|\.\d+)([eE][+-]?\d+)?$/.test(s);
}Tradeoff: Works but Salesforce may forbid regex — they want to see FSM reasoning.
2. Finite State Machine
Track states: start, sign, integer, dot, fraction, exp, expSign, expInt. Transitions on each character.
- Time
- O(n)
- Space
- O(1)
function isNumber(s) {
let seenDigit = false, seenDot = false, seenE = false, seenDigitAfterE = true;
for (let i = 0; i < s.length; i++) {
const c = s[i];
if (c >= '0' && c <= '9') { seenDigit = true; seenDigitAfterE = true; }
else if (c === '+' || c === '-') { if (i > 0 && s[i-1] !== 'e' && s[i-1] !== 'E') return false; }
else if (c === '.') { if (seenDot || seenE) return false; seenDot = true; }
else if (c === 'e' || c === 'E') { if (seenE || !seenDigit) return false; seenE = true; seenDigitAfterE = false; }
else return false;
}
return seenDigit && seenDigitAfterE;
}Tradeoff: Explicit FSM. Each transition is enforced via boolean flags. Salesforce's preferred answer.
Salesforce-specific tips
Salesforce uses similar validation for numeric Apex field inputs (Currency, Number with decimal places). They grade on whether you can enumerate all the edge cases (leading +/-, '.', 'e', '+/-' after e, trailing digits after e). Bonus signal: mention this is essentially a regular language — the regex is correct precisely because no infinite recursion is needed.
Common mistakes
- Allowing '+' or '-' anywhere (not just start or after e/E).
- Allowing '.' after 'e' — exponent must be integer.
- Allowing 'e' without digits before it — '.e1' is invalid.
Follow-up questions
An interviewer at Salesforce may pivot to one of these next:
- Parse and convert to number (LC 8, atoi).
- Validate scientific notation only.
- Support hex and octal.
Solve it now
Free. No sign-up. Python and JavaScript run instantly in your browser.
FAQ
Is regex acceptable?
Depends on the interviewer. Some forbid regex to test FSM reasoning; others accept it. Always offer both if you have time.
What about '.5' and '5.'?
Both are valid — at least one digit (before OR after the dot) is required. The FSM tracks 'seenDigit' to ensure this.