НовоеAI-конструктор резюме: правишь прямо на листе A4, а нейросеть подсказывает, что усилитьКонструктор резюме на листе A4Попробовать
JobPath
Начать бесплатно

AndroidSeniorЗадача на код

Напиши функцию, которая проверяет, является ли число палиндромом без преобразования в строку

Встречался на собеседовании

Ответ

Что хотят услышать интервьюеры

Интервьюеры ожидают увидеть понимание концепции палиндрома, а также алгоритма, который позволяет проверить это свойство без преобразования числа в строку. Кандидат должен продемонстрировать навыки работы с числами, использование математических операций и логического мышления. Важно также показать, что кандидат понимает сложность алгоритма и может объяснить его работу.

План решения:

  1. Определение палиндрома: число является палиндромом, если его цифры читаются одинаково в прямом и обратном порядке.
  2. Проверка отрицательных чисел: они не могут быть палиндромами.
  3. Извлечение цифр: используя математические операции, извлекать цифры из числа.
  4. Сравнение цифр: сравнивать первую и последнюю цифры, затем вторую и предпоследнюю и так далее.

Код реализации:

public class PalindromeChecker {
    public static boolean isPalindrome(int number) {
        // Отрицательные числа и числа, оканчивающиеся на 0 (кроме 0) не являются палиндромами
        if (number < 0 || (number % 10 == 0 && number != 0)) {
            return false;
        }
        
        int reversedNumber = 0;
        // Проверяем до тех пор, пока оригинальное число больше reversedNumber
        while (number > reversedNumber) {
            // Извлекаем последнюю цифру
            reversedNumber = reversedNumber * 10 + number % 10;
            number /= 10; // Убираем последнюю цифру из оригинального числа
        }
        
        // Для четных чисел, reversedNumber будет равен number
        // Для нечетных, убираем центральную цифру, чтобы сравнить
        return number == reversedNumber || number == reversedNumber / 10;
    }

    public static void main(String[] args) {
        System.out.println(isPalindrome(121)); // true
        System.out.println(isPalindrome(-121)); // false
        System.out.println(isPalindrome(10)); // false
        System.out.println(isPalindrome(12321)); // true
    }
}

Анализ:

  • Отрицательные числа: Отсекаются на первом шаге.
  • Цифры: Извлекаются с помощью деления и остатка от деления.
  • Сравнение: Проверяется, совпадают ли оригинальное число и перевернутое число, учитывая нечетные случаи.
  • Сложность: O(log10(N)), где N — число, так как мы делим число на 10 на каждом шаге.

Что могут спросить дальше

  • Объяснить, как работают математические операции в коде.
  • Привести пример работы с нечетным числом.
  • Обсудить сложность алгоритма.
  • Расширить функцию для работы с большими числами.
Ответ помог?
Тренироваться бесплатно

Связаться с поддержкой

Выбери, где удобнее написать