Разбор задачи 8. String to Integer (atoi) LeetCode.com

Реализуйте myAtoi(string s)функцию, которая преобразует строку в 32-битное целое число со знаком (аналогично функции C/C++ atoi).

Алгоритм работы myAtoi(string s)следующий:

  1. Прочтите и игнорируйте начальные пробелы.
  2. Проверьте, является ли следующий символ (если он еще не находится в конце строки) '-'или '+'. Прочтите этот символ, если он есть. Это определяет, будет ли окончательный результат отрицательным или положительным соответственно. Предположим, что результат положительный, если ни один из них не присутствует.
  3. Считайте следующие символы, пока не будет достигнут следующий нецифровой символ или конец ввода. Остальная часть строки игнорируется.
  4. Преобразуйте эти цифры в целое число (т.е. "123" -> 123"0032" -> 32). Если цифры не были прочитаны, то целое число равно 0. При необходимости измените знак (из шага 2).
  5. Если целое число выходит за пределы диапазона 32-разрядных целых чисел со знаком , зафиксируйте целое число, чтобы оно оставалось в этом диапазоне. В частности, целые числа меньше должны быть зафиксированы до , а целые числа больше должны быть зафиксированы до .[-231, 231 - 1]-231-231231 - 1231 - 1
  6. Возвращает целое число в качестве окончательного результата.

Примечание:

  • Только символ пробела ' 'считается символом пробела.
  • Не игнорируйте никакие символы, кроме начального пробела или остальной части строки после цифр.
Пример 1:
Ввод: s = «42»
Вывод: 42
Объяснение: Подчеркнутые символы — это то, что читается, знак вставки — это текущая позиция считывателя.

Шаг 1: «42» (символы не читаются, потому что нет начального пробела)

Шаг 2: «42» (символы не читаются, потому что нет ни «-», ни «+»)

Шаг 3: «
42 » («42» считывается)

Проанализированное целое число равно 42.

Поскольку 42 находится в диапазоне [-2
31 , 2
31 — 1], окончательный результат равен 42.

Решение данной задачи может быть реализовано следующим образом:

  1. Прочитаем и проигнорируем начальные пробелы, если они есть, пока не достигнем первого непробельного символа.
  2. Проверим, является ли следующий символ ‘-‘ или ‘+’. Если да, запомним знак и перейдем к следующему символу.
  3. Считывайте символы, пока они являются цифрами (от ‘0’ до ‘9’), преобразуя их в числовое значение и добавляя их к результату.
  4. При необходимости измените знак результата в соответствии с сохраненным знаком.
  5. Проверьте, выходит ли результат за пределы диапазона 32-битных целых чисел со знаком [-2^31, 2^31 — 1]. Если да, верните предельное значение (MIN_INT или MAX_INT) в зависимости от знака.
  6. Верните полученное целое число в качестве окончательного результата.

Решение задачи «String to Integer (atoi)» пример кода на Python

class Solution(object):
    def myAtoi(self, s):  
        s = s.strip()  # Удаляем начальные и конечные пробелы
        if not s:
            return 0

        sign = 1  # Знак числа (1 для положительного, -1 для отрицательного)
        result = 0
        i = 0

        if s[i] == '-' or s[i] == '+':  # Проверяем знак числа
            if s[i] == '-':
                sign = -1
            i += 1

        while i < len(s) and s[i].isdigit():  # Считываем цифры
            result = result * 10 + int(s[i])
            i += 1

        result *= sign  # Применяем знак к результату

        # Проверка на выход из диапазона 32-битных целых чисел
        if result < -2**31:
            return -2**31
        elif result > 2**31 - 1:
            return 2**31 - 1
        else:
            return result

Решение задачи «String to Integer (atoi)» пример кода на Java

class Solution {
    public int myAtoi(String s) {
        s = s.trim();  // Удаляем начальные и конечные пробелы
        if (s.isEmpty())
            return 0;

        int sign = 1;  // Знак числа (1 для положительного, -1 для отрицательного)
        int result = 0;
        int i = 0;

        if (s.charAt(i) == '-' || s.charAt(i) == '+') {  // Проверяем знак числа
            if (s.charAt(i) == '-')
                sign = -1;
            i++;
        }

        while (i < s.length() && Character.isDigit(s.charAt(i))) {  // Считываем цифры
            int digit = s.charAt(i) - '0';
            if (result > (Integer.MAX_VALUE - digit) / 10) {
                return (sign == 1) ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            }
            result = result * 10 + digit;
            i++;
        }

        return result * sign;  // Применяем знак к результату
    }

}

Решение задачи «String to Integer (atoi)» пример кода на C++

class Solution {
public:
    int myAtoi(string s) {
        s.erase(0, s.find_first_not_of(' '));  // Удаляем начальные пробелы
        if (s.empty())
            return 0;

        int sign = 1;  // Знак числа (1 для положительного, -1 для отрицательного)
        int result = 0;
        int i = 0;

        if (s[i] == '-' || s[i] == '+') {  // Проверяем знак числа
            if (s[i] == '-')
                sign = -1;
            i++;
        }

        while (i < s.length() && isdigit(s[i])) {  // Считываем цифры
            int digit = s[i] - '0';
            if (result > (INT_MAX - digit) / 10) {
                return (sign == 1) ? INT_MAX : INT_MIN;
            }
            result = result * 10 + digit;
            i++;
        }

        return result * sign;  // Применяем знак к результату
    }


};


Решение задачи «String to Integer (atoi)» пример кода на JavaScript

/**
 * @param {string} s
 * @return {number}
 */
var myAtoi = function(s) {
    s = s.trim();  // Удаляем начальные и конечные пробелы
    if (s.length === 0)
        return 0;

    let sign = 1;  // Знак числа (1 для положительного, -1 для отрицательного)
    let result = 0;
    let i = 0;

    if (s[i] === '-' || s[i] === '+') {  // Проверяем знак числа
        if (s[i] === '-')
            sign = -1;
        i++;
    }

    while (i < s.length && /^\d$/.test(s[i])) {  // Считываем цифры
        result = result * 10 + parseInt(s[i]);
        i++;
    }

    result *= sign;  // Применяем знак к результату

    // Проверка на выход из диапазона 32-битных целых чисел
    if (result < -Math.pow(2, 31)) {
        return -Math.pow(2, 31);
    } else if (result > Math.pow(2, 31) - 1) {
        return Math.pow(2, 31) - 1;
    } else {
        return result;
    }
}

Решение задачи «String to Integer (atoi)» пример кода на C#

public class Solution {
    public int MyAtoi(string s) {
        s = s.Trim();  // Удаляем начальные и конечные пробелы
        if (string.IsNullOrEmpty(s))
            return 0;

        int sign = 1;  // Знак числа (1 для положительного, -1 для отрицательного)
        int result = 0;
        int i = 0;

        if (s[i] == '-' || s[i] == '+') {  // Проверяем знак числа
            if (s[i] == '-')
                sign = -1;
            i++;
        }

        while (i < s.Length && char.IsDigit(s[i])) {  // Считываем цифры
            int digit = s[i] - '0';
            if (result > (int.MaxValue - digit) / 10) {
                return (sign == 1) ? int.MaxValue : int.MinValue;
            }
            result = result * 10 + digit;
            i++;
        }

        return result * sign;  // Применяем знак к результату
    }

}

Если у вас не отображается решение последних задач, значит у вас включен блокировщик рекламы который вырезает эти ответы

Понравилась статья? Поделиться с друзьями:
Подписаться
Уведомить о
guest

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x