Разбор задачи 9. Palindrome Number LeetCode.com

Учитывая целое число x, вернуть, true если x это палиндром, и false в противном случае.

Пример 1:

Ввод: x = 121
 Вывод: true
 Объяснение: 121 читается как 121 слева направо и справа налево.

Пример 2:

Ввод: x = -121
 Вывод: false
 Объяснение: Слева направо читается -121. Справа налево получается 121-. Следовательно, это не палиндром.

Пример 3:

Ввод: x = 10
 Вывод: false
 Объяснение: 01 читается справа налево. Следовательно, это не палиндром.

Ограничения:

  • -231 <= x <= 231 - 1

Дополнение: не могли бы вы решить эту задачу, не преобразовывая целое число в строку?

Решение задачи, не преобразовывая целое число в строку, можно осуществить, используя алгоритм для проверки палиндромности числа. Для этого мы будем переворачивать число и сравнивать его с исходным. Если числа равны, то число является палиндромом, иначе нет.

Алгоритм будет выглядеть следующим образом:

  1. Обработка исключительных случаев:
    • Если число x меньше 0, то оно не может быть палиндромом, так как отрицательные числа не палиндромы (Пример 2).
    • Если число x оканчивается на 0, то оно также не может быть палиндромом, так как числа, оканчивающиеся на 0, могут быть палиндромами только в случае, если они равны 0 (Пример 3).
  2. Инициализация переменных:
    • Создаем переменную «reversed_num» и устанавливаем её равной 0. В ней будем сохранять число, перевернутое в обратном порядке.
  3. Основной шаг алгоритма:
    • Пока исходное число x больше 0, выполняем следующие действия:
      • Получаем последнюю цифру числа x с помощью операции взятия остатка от деления на 10 и добавляем её в конец числа reversed_num.
      • Уменьшаем исходное число x на один разряд путем целочисленного деления на 10.
  4. Сравнение чисел:
    • Если исходное число x равно полученному числу reversed_num, то возвращаем true, так как число является палиндромом.
    • В противном случае возвращаем false, так как число не является палиндромом.

Решение задачи «Palindrome Number» пример кода на Python

class Solution(object):
    def isPalindrome(self, x):
        # Проверяем исключительные случаи:
        # Если число меньше 0 или оканчивается на 0 (кроме нуля),
        # то оно не может быть палиндромом.
        if x < 0 or (x % 10 == 0 and x != 0):
            return False
        
        reversed_num = 0
        original_x = x
        
        # Пока исходное число x больше 0, выполняем следующие действия:
        # - Получаем последнюю цифру числа x с помощью операции взятия остатка от деления на 10
        #   и добавляем ее в конец числа reversed_num.
        # - Уменьшаем исходное число x на один разряд путем целочисленного деления на 10.
        while x > 0:
            reversed_num = reversed_num * 10 + x % 10
            x //= 10
        
        # Сравнение исходного числа x с перевернутым числом reversed_num.
        return original_x == reversed_num

Решение задачи «Palindrome Number» пример кода на Java

class Solution {
    public boolean isPalindrome(int x) {
        // Проверяем исключительные случаи:
        // Если число меньше 0 или оканчивается на 0 (кроме нуля),
        // то оно не может быть палиндромом.
        if (x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }
        
        int reversedNum = 0;
        int originalX = x;
        
        // Пока исходное число x больше 0, выполняем следующие действия:
        // - Получаем последнюю цифру числа x с помощью операции взятия остатка от деления на 10
        //   и добавляем ее в конец числа reversed_num.
        // - Уменьшаем исходное число x на один разряд путем целочисленного деления на 10.
        while (x > 0) {
            reversedNum = reversedNum * 10 + x % 10;
            x /= 10;
        }
        
        // Сравнение исходного числа x с перевернутым числом reversed_num.
        return originalX == reversedNum;
    }
}

Решение задачи «Palindrome Number» пример кода на C++

class Solution {
public:
    bool isPalindrome(int x) {
        // Проверяем исключительные случаи:
        // Если число меньше 0 или оканчивается на 0 (кроме нуля),
        // то оно не может быть палиндромом.
        if (x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }
        
        long reversedNum = 0;
        int originalX = x;
        
        // Пока исходное число x больше 0, выполняем следующие действия:
        // - Получаем последнюю цифру числа x с помощью операции взятия остатка от деления на 10
        //   и добавляем ее в конец числа reversed_num.
        // - Уменьшаем исходное число x на один разряд путем целочисленного деления на 10.
        while (x > 0) {
            reversedNum = reversedNum * 10 + x % 10;
            x /= 10;
        }
        
        // Сравнение исходного числа x с перевернутым числом reversed_num.
        return originalX == reversedNum;
    }
};

Решение задачи «Palindrome Number» пример кода на JavaScript

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
    // Проверяем исключительные случаи:
    // Если число меньше 0 или оканчивается на 0 (кроме нуля),
    // то оно не может быть палиндромом.
    if (x < 0 || (x % 10 === 0 && x !== 0)) {
        return false;
    }
    
    let reversedNum = 0;
    let originalX = x;
    
    // Пока исходное число x больше 0, выполняем следующие действия:
    // - Получаем последнюю цифру числа x с помощью операции взятия остатка от деления на 10
    //   и добавляем ее в конец числа reversed_num.
    // - Уменьшаем исходное число x на один разряд путем целочисленного деления на 10.
    while (x > 0) {
        reversedNum = reversedNum * 10 + x % 10;
        x = Math.floor(x / 10);
    }
    
    // Сравнение исходного числа x с перевернутым числом reversed_num.
    return originalX === reversedNum;
}

Решение задачи «Palindrome Number» пример кода на C#

public class Solution {
    public bool IsPalindrome(int x)
    {
        // Проверяем исключительные случаи:
        // Если число меньше 0 или оканчивается на 0 (кроме нуля),
        // то оно не может быть палиндромом.
        if (x < 0 || (x % 10 == 0 && x != 0))
        {
            return false;
        }
        
        int reversedNum = 0;
        int originalX = x;
        
        // Пока исходное число x больше 0, выполняем следующие действия:
        // - Получаем последнюю цифру числа x с помощью операции взятия остатка от деления на 10
        //   и добавляем ее в конец числа reversed_num.
        // - Уменьшаем исходное число x на один разряд путем целочисленного деления на 10.
        while (x > 0)
        {
            reversedNum = reversedNum * 10 + x % 10;
            x /= 10;
        }
        
        // Сравнение исходного числа x с перевернутым числом reversed_num.
        return originalX == reversedNum;
    }
}

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

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

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