Bird
Raised Fist0
DSA Typescriptprogramming

String to Integer atoi in DSA Typescript

Choose your learning style10 modes available
Mental Model
Convert a string of characters into a number by reading each character and building the number step by step.
Analogy: Like reading digits on a scoreboard one by one and combining them to know the total score.
"" (empty string) -> start reading characters -> build number -> final integer
Dry Run Walkthrough
Input: string: " -42"
Goal: Convert the string to the integer -42 following rules: ignore spaces, handle sign, stop at first non-digit
Step 1: skip leading spaces
"-42" (ready to parse sign and digits)
Why: Spaces do not affect the number, so we ignore them first
Step 2: detect sign '-' and set negative flag
"42" with negative sign set
Why: Sign tells us if the number is positive or negative
Step 3: read digit '4' and start building number: 4
number = 4
Why: First digit forms the start of the number
Step 4: read digit '2' and update number: 4 * 10 + 2 = 42
number = 42
Why: Each new digit shifts previous digits left and adds new digit
Step 5: no more digits, stop parsing
final number = -42
Why: Stop when non-digit or end of string reached
Result:
-42
Annotated Code
DSA Typescript
class Solution {
  static myAtoi(s: string): number {
    let i = 0;
    let n = s.length;
    let sign = 1;
    let result = 0;

    // skip leading spaces
    while (i < n && s[i] === ' ') {
      i++;
    }

    // check sign
    if (i < n && (s[i] === '+' || s[i] === '-')) {
      sign = s[i] === '-' ? -1 : 1;
      i++;
    }

    // convert digits to number
    while (i < n && s[i] >= '0' && s[i] <= '9') {
      const digit = s.charCodeAt(i) - '0'.charCodeAt(0);
      result = result * 10 + digit;
      i++;
    }

    return sign * result;
  }
}

// driver code
const input = "  -42";
console.log(Solution.myAtoi(input));
while (i < n && s[i] === ' ') { i++; }
skip all spaces before number starts
if (i < n && (s[i] === '+' || s[i] === '-')) { sign = s[i] === '-' ? -1 : 1; i++; }
detect and record sign, then move forward
while (i < n && s[i] >= '0' && s[i] <= '9') { const digit = s.charCodeAt(i) - '0'.charCodeAt(0); result = result * 10 + digit; i++; }
read digits one by one, build number by shifting and adding
return sign * result;
apply sign to final number and return
OutputSuccess
-42
Complexity Analysis
Time: O(n) because we scan the string once from left to right
Space: O(1) because we use only a few variables regardless of input size
vs Alternative: Compared to parsing with built-in functions, this manual method controls parsing rules and stops at first invalid character
Edge Cases
empty string
returns 0 because no digits found
DSA Typescript
while (i < n && s[i] >= '0' && s[i] <= '9') { ... }
string with only spaces
returns 0 after skipping spaces and finding no digits
DSA Typescript
while (i < n && s[i] === ' ') { i++; }
string with sign but no digits, e.g. '+' or '-'
returns 0 because no digits after sign
DSA Typescript
while (i < n && s[i] >= '0' && s[i] <= '9') { ... }
When to Use This Pattern
When you need to convert a string to a number manually, especially handling spaces, signs, and stopping at invalid characters, use the String to Integer atoi pattern.
Common Mistakes
Mistake: Not skipping leading spaces before parsing digits
Fix: Add a loop to skip spaces before checking sign or digits
Mistake: Not handling sign character correctly
Fix: Check for '+' or '-' and set sign variable accordingly before parsing digits
Mistake: Parsing characters beyond digits causing errors
Fix: Stop parsing when a non-digit character is encountered
Summary
Converts a string into an integer by reading characters step by step.
Use when you need to parse numbers from strings with spaces and optional signs.
The key is to skip spaces, detect sign, then build the number digit by digit stopping at the first non-digit.

Practice

(1/5)
1. What does the atoi function do when given a string input?
easy
A. Converts the string to a floating-point number
B. Reverses the string characters
C. Converts the string to an integer number
D. Counts the number of characters in the string

Solution

  1. Step 1: Understand the purpose of atoi

    The atoi function stands for ASCII to integer and converts a string representing a number into an integer value.
  2. Step 2: Compare options with function behavior

    Only Converts the string to an integer number correctly describes this conversion. Other options describe different operations unrelated to atoi.
  3. Final Answer:

    Converts the string to an integer number -> Option C
  4. Quick Check:

    atoi converts string to integer [OK]
Hint: Remember atoi means ASCII to integer conversion [OK]
Common Mistakes:
  • Thinking atoi converts to float
  • Confusing atoi with string reversal
  • Assuming atoi counts characters
2. Which of the following TypeScript function signatures correctly represents a simple atoi function?
easy
A. function atoi(str: string): number
B. function atoi(num: number): string
C. function atoi(str: number): string
D. function atoi(): void

Solution

  1. Step 1: Identify input and output types for atoi

    atoi takes a string input and returns a number (integer).
  2. Step 2: Match function signature with correct types

    function atoi(str: string): number matches this: input is string, output is number. Other options have wrong input/output types or no parameters.
  3. Final Answer:

    function atoi(str: string): number -> Option A
  4. Quick Check:

    Input string, output number [OK]
Hint: atoi input is string, output is number [OK]
Common Mistakes:
  • Swapping input and output types
  • Using no parameters
  • Using wrong parameter types
3. What is the output of the following TypeScript code?
function atoi(str: string): number {
  let i = 0, num = 0, sign = 1;
  while (str[i] === ' ') i++;
  if (str[i] === '-' || str[i] === '+') {
    sign = str[i] === '-' ? -1 : 1;
    i++;
  }
  while (i < str.length && str[i] >= '0' && str[i] <= '9') {
    num = num * 10 + (str.charCodeAt(i) - 48);
    i++;
  }
  return num * sign;
}
console.log(atoi("  -42abc"));
medium
A. -42
B. 42
C. 0
D. NaN

Solution

  1. Step 1: Skip leading spaces and detect sign

    The code skips spaces, finds '-', so sign = -1, index moves past '-'.
  2. Step 2: Parse digits until non-digit

    Reads '4' and '2', converts to number 42, stops at 'a'.
  3. Step 3: Apply sign and return

    Returns 42 * -1 = -42.
  4. Final Answer:

    -42 -> Option A
  5. Quick Check:

    Parsed number with sign = -42 [OK]
Hint: Skip spaces, check sign, parse digits until non-digit [OK]
Common Mistakes:
  • Not skipping spaces
  • Ignoring sign character
  • Parsing non-digit characters
4. The following TypeScript atoi implementation has a bug. What is the bug?
function atoi(str: string): number {
  let num = 0;
  let i = 0;
  while (i < str.length && str[i] === ' ') i++;
  for (; i < str.length; i++) {
    if (str[i] < '0' || str[i] > '9') break;
    num = num * 10 + (str.charCodeAt(i) - 48);
  }
  return num;
}
medium
A. Returns string instead of number
B. Does not handle leading spaces
C. Does not stop parsing at non-digit characters
D. Does not handle negative or positive signs

Solution

  1. Step 1: Check for sign handling

    The code does not check for '+' or '-' signs before parsing digits.
  2. Step 2: Verify other behaviors

    It skips leading spaces, stops parsing at first non-digit and returns number, so no issue there. The main bug is missing sign handling.
  3. Final Answer:

    Does not handle negative or positive signs -> Option D
  4. Quick Check:

    Missing sign handling in atoi [OK]
Hint: Check if signs '+' or '-' are handled [OK]
Common Mistakes:
  • Assuming spaces are main bug
  • Thinking it parses non-digit characters
  • Confusing return type
5. You want to extend the atoi function to handle integer overflow by clamping the result between INT_MIN = -2147483648 and INT_MAX = 2147483647. Which code snippet correctly clamps the value before returning?
const INT_MIN = -2147483648;
const INT_MAX = 2147483647;

function atoi(str: string): number {
  let i = 0, num = 0, sign = 1;
  while (str[i] === ' ') i++;
  if (str[i] === '-' || str[i] === '+') {
    sign = str[i] === '-' ? -1 : 1;
    i++;
  }
  while (i < str.length && str[i] >= '0' && str[i] <= '9') {
    num = num * 10 + (str.charCodeAt(i) - 48);
    i++;
  }
  num = num * sign;
  // Clamp here
  // ???
  return num;
}
hard
A. if (num > INT_MIN) return INT_MIN; if (num < INT_MAX) return INT_MAX;
B. if (num < INT_MIN) return INT_MIN; if (num > INT_MAX) return INT_MAX;
C. if (num < INT_MAX) return INT_MIN; if (num > INT_MIN) return INT_MAX;
D. if (num === INT_MIN) return INT_MAX; if (num === INT_MAX) return INT_MIN;

Solution

  1. Step 1: Understand clamping logic

    If number is less than INT_MIN, return INT_MIN; if greater than INT_MAX, return INT_MAX.
  2. Step 2: Match correct condition and return

    if (num < INT_MIN) return INT_MIN; if (num > INT_MAX) return INT_MAX; correctly checks and returns clamped values. Other options have incorrect comparisons or swap min/max.
  3. Final Answer:

    if (num < INT_MIN) return INT_MIN; if (num > INT_MAX) return INT_MAX; -> Option B
  4. Quick Check:

    Clamp below min and above max correctly [OK]
Hint: Clamp with if less than min or greater than max [OK]
Common Mistakes:
  • Swapping INT_MIN and INT_MAX in conditions
  • Using equality instead of inequality
  • Returning wrong clamp value
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard