> For the complete documentation index, see [llms.txt](https://grind75-notes.gitbook.io/notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://grind75-notes.gitbook.io/notes/week-6/string-to-integer-atoi.md).

# String to Integer (atoi)

{% embed url="<https://leetcode.com/problems/string-to-integer-atoi>" %}

### Problem

> Implement the `myAtoi(string s)` function, which converts a string to a 32-bit signed integer (similar to C/C++'s `atoi` function).
>
> The algorithm for `myAtoi(string s)` is as follows:
>
> 1. Read in and ignore any leading whitespace.
> 2. Check if the next character (if not already at the end of the string) is `'-'` or `'+'`. Read this character in if it is either. This determines if the final result is negative or positive respectively. Assume the result is positive if neither is present.
> 3. Read in next the characters until the next non-digit character or the end of the input is reached. The rest of the string is ignored.
> 4. Convert these digits into an integer (i.e. `"123" -> 123`, `"0032" -> 32`). If no digits were read, then the integer is `0`. Change the sign as necessary (from step 2).
> 5. If the integer is out of the 32-bit signed integer range `[-231, 231 - 1]`, then clamp the integer so that it remains in the range. Specifically, integers less than `-231` should be clamped to `-231`, and integers greater than `231 - 1` should be clamped to `231 - 1`.
> 6. Return the integer as the final result.
>
> **Note:**
>
> * Only the space character `' '` is considered a whitespace character.
> * **Do not ignore** any characters other than the leading whitespace or the rest of the string after the digits.
>
> &#x20;
>
> **Example 1:**
>
> <pre data-overflow="wrap"><code>Input: s = "42"
> <strong>Output: 42
> </strong><strong>Explanation:
> </strong> The underlined characters are what is read in, the caret is the current reader position.
> Step 1: "42" (no characters read because there is no leading whitespace)
>          ^
> Step 2: "42" (no characters read because there is neither a '-' nor '+')
>          ^
> Step 3: "42" ("42" is read in)
>            ^
> The parsed integer is 42.
> Since 42 is in the range [-231, 231 - 1], the final result is 42.
> </code></pre>
>
> **Example 2:**
>
> <pre><code>Input: s = "   -42"
> <strong>Output: -42
> </strong><strong>Explanation:
> </strong>Step 1: "   -42" (leading whitespace is read and ignored)
>             ^
> Step 2: "   -42" ('-' is read, so the result should be negative)
>              ^
> Step 3: "   -42" ("42" is read in)
>                ^
> The parsed integer is -42.
> Since -42 is in the range [-231, 231 - 1], the final result is -42.
> </code></pre>
>
> **Example 3:**
>
> <pre data-overflow="wrap"><code>Input: s = "4193 with words"
> <strong>Output: 4193
> </strong><strong>Explanation:
> </strong>Step 1: "4193 with words" (no characters read because there is no leading whitespace)
>          ^
> Step 2: "4193 with words" (no characters read because there is neither a '-' nor '+')
>          ^
> Step 3: "4193 with words" ("4193" is read in; reading stops because the next character is a non-digit)
>              ^
> The parsed integer is 4193.
> Since 4193 is in the range [-231, 231 - 1], the final result is 4193.
> </code></pre>

### Pseudocode

```
- don't understand question
```

### Solution

```javascript
var myAtoi = function (str) {
  const MIN_VALUE = Math.pow(-2, 31);
  const MAX_VALUE = Math.pow(2, 31) - 1;
  const result = Number(str.trimLeft().match(/^[-\+]?\d+/));
  if (result < MIN_VALUE) return MIN_VALUE;
  if (result > MAX_VALUE) return MAX_VALUE;
  return result;
};

```

### Time and Space Complexity

#### Time

* What did the code do
* Total -

#### Space

* What did the code do
* Total -
