Palindrome Number

https://leetcode.com/problems/palindrome-numberEasy

Условие

Определите, является ли данное число палиндромом. Число считается палиндромом, если оно читается одинаково слева направо и справа налево.

Примеры

Input: 121

Output: true
Input: -121

Output: false
Input: 10

Output: false

Решение

fun isPalindrome(x: Int): Boolean {
    // Отрицательные числа не могут быть палиндромами
    if (x < 0) return false
    
    // Если число оканчивается на 0 и не является нулем, то оно не может быть палиндромом
    if (x % 10 == 0 && x != 0) return false
    
    var original = x // Сохраняем оригинальное число для последующего сравнения.
    var reversed = 0 // Переменная для хранения инвертированного числа.
    
    // Инвертируем число
    while (original > 0) {
        val digit = original % 10 // Извлекаем последнюю цифру текущего числа.
        reversed = reversed * 10 + digit // Добавляем эту цифру к `reversed`, передвигая текущие цифры на одну позицию влево.
        original /= 10 // Удаляем последнюю цифру из `original` путем целочисленного деления на 10.
    }
    
    // Сравниваем инвертированное число с исходным
    return reversed == x
}

Временная сложность

O(log n), где n — входное число. Временная сложность пропорциональна количеству цифр в числе.

Пространственная сложность

O(1). Используется фиксированное количество дополнительной памяти для хранения переменных.