Palindrome Number - LeetCode
----- Условие ----- Требуется проверить, является ли число палиндромом. 121 - палиндром, 1321 - не палиндром. Отдельные случаи: * отрицательные числа не являются палиндромами; * числа, меньшие 10, являются палиндромами.
----- Решение ----- Решение сводится к полному разворачиванию числа X путем получения остатка при делении на 10 и добавления этого остатка в младшее звено числа reverseX со сдвигом влево. А далее обычное числовое сравнение. Числа, оканчивающиеся на 0, не могут быть палиндромами, так как 0 впереди числа не записывается. Сложность по времени O(n), где n - порядок числа, сложность по памяти O(1).
Стоит отметить, что для задачи просят решение без преобразования в строку. Для проверки, палиндром ли строка, можно выполнить сравнение: str === str.split(‘’).reverse().join(‘’).
----- Код ----- /** * @param {number} x * @return {boolean} */ const isPalindrome = function(x) { if (x < 10 && x >= 0) return true; if (x < 0) return false; if (x % 10 === 0) return false; let remainderX = x; let reverseX = 0;
while (remainderX) { reverseX = reverseX * 10 + remainderX % 10; remainderX = Math.trunc(remainderX / 10); }
return x === reverseX; };