Вопрос: Реализуйте atoi, который преобразует строку в целое число. Подробный вопрос ищите здесь.

В случае, если вы впервые возитесь с этим вопросом, я настоятельно рекомендую вам для начала взглянуть на более простую стратегию, упомянутую здесь.

Подход 2. Начать с того места, где мы остановились. Предыдущий подход сильно зависел от преобразования строки в целое число. Если мы попытались преобразовать недопустимую строку, например пустую строку, слишком длинную последовательность чисел (положительную или отрицательную), то возникало исключение. Мы полагались на этот шаг исключения, чтобы вернуть соответствующее альтернативное значение. Этот подход, хотя и приемлемый, требует слишком много времени для запуска.

Вдохновившись другим постом (вы можете посмотреть его здесь), давайте попробуем другую стратегию, кратко изложенную ниже —

  • Используйте больший контейнер для хранения (возможного) значения переполнения.
  • Перед возвратом убедитесь, что значение в контейнере находится в допустимом диапазоне int (убедитесь, что вы привели его к int)
  • Если за пределами диапазона, вернуть соответствующее альтернативное значение

Быстрый взгляд на код —

//Approach 2
//Runtime: 14ms
//Memory usage: 38.6MB
class Solution {
    public int myAtoi(String str) {
  char[] chars = str.trim().toCharArray();
        
        if(chars.length==0){
            return 0;
        }
        int sign = 1;
        int start = 0;
        if(chars[0]=='-'){
            start++;
            sign = -1;
        } else if(chars[0]=='+'){
            start++;
        }
        double finalInt = 0;
        for(int i = start; i<chars.length; i++){
            if(chars[i]>='0' && chars[i]<='9'){
                finalInt=finalInt*10 + chars[i]-'0';
            } else {
                break;
            }            
        }
        finalInt*=sign;
        if(finalInt>Integer.MAX_VALUE){
            return Integer.MAX_VALUE;
        } else if(finalInt<Integer.MIN_VALUE){
            return Integer.MIN_VALUE;
        } else {
            return (int)finalInt;
        }
    }
}

Для более быстрой реализации вы можете проверить это.

Больше постов ищите здесь.

Удачи и Чао!