Дано целое число x
, верните true
, если x
является палиндромом, и false
в ином случае.
Нужно попробовать решить эту задачу без конвертации числа в строку.
Example 1:
Input: x = 121
Output: true
Explanation: 121 reads as 121 from left to right and from right to left.
Example 2:
Input: x = -121
Output: false
Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.
Example 3:
Input: x = 10
Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.
Решение на Java
class Solution {
public boolean isPalindrome(int x) {
int original = x;
int reversed = 0;
while(x > 0) {
int last_digit = x % 10;
reversed = reversed * 10 + last_digit;
x = x / 10;
}
return original == reversed;
}
}
Объяснение
-
Запоминает оригинальное число:
int original = x;
Мы сохраняем оригинальное значение числа
x
в переменнуюoriginal
, чтобы потом сравнить с обратным числом. -
Создает переменную для хранения перевернутого числа:
int reversed = 0;
Переменная
reversed
будет хранить число, полученное из цифрx
, но в обратном порядке. -
Переворачивает число:
- Пока
x
больше нуля, выполняем цикл:while(x > 0) { int last_digit = x % 10; // Берем последнюю цифру числа x reversed = reversed * 10 + last_digit; // Добавляем последнюю цифру к перевернутому числу x = x / 10; // Убираем последнюю цифру из x }
- Давайте разберем это на примере:
- Пусть
x = 123
. - В первой итерации:
last_digit = 3
,reversed = 0 * 10 + 3 = 3
,x = 12
. - Во второй итерации:
last_digit = 2
,reversed = 3 * 10 + 2 = 32
,x = 1
. - В третьей итерации:
last_digit = 1
,reversed = 32 * 10 + 1 = 321
,x = 0
.
- Пусть
- Пока
-
Сравнивает оригинальное число с перевернутым:
return original == reversed;
Если оригинальное число равно перевернутому, значит, число является палиндромом, и функция возвращает
true
. В противном случае возвращаетfalse
.
Пример:
- Пусть
x = 121
.- Оригинальное число сохраняется в
original = 121
. - Переворачиваем
x
:last_digit = 1
,reversed = 0 * 10 + 1 = 1
,x = 12
.last_digit = 2
,reversed = 1 * 10 + 2 = 12
,x = 1
.last_digit = 1
,reversed = 12 * 10 + 1 = 121
,x = 0
.
original == reversed
, значит,121
является палиндромом, и функция вернетtrue
.
- Оригинальное число сохраняется в
Решение на Ruby
# @param {Integer} x
# @return {Boolean}
def is_palindrome(x)
original = x
reversed = 0
while x > 0
last_digit = x % 10
reversed = reversed * 10 + last_digit
x = x / 10
end
reversed == original
end
Решение на Golang
func isPalindrome(x int) bool {
original := x
reversed := 0
for x > 0 {
lastDigit := x % 10
reversed = reversed * 10 + lastDigit
x = x / 10
}
return original == reversed
}
Решение на Javascript / Typescript
function isPalindrome(x: number): boolean {
let original: number = x
let reversed: number = 0
while(x > 0) {
let lastDigit: number = x % 10
reversed = reversed * 10 + lastDigit
x = Math.floor(x / 10)
}
return original == reversed
};
Решение на Python
class Solution:
def isPalindrome(self, x: int) -> bool:
original: int = x
reversed: int = 0
while x > 0:
last_digit: int = x % 10
reversed = reversed * 10 + last_digit
x = x // 10
return original == reversed
Решение на PHP
class Solution {
/**
* @param Integer $x
* @return Boolean
*/
function isPalindrome($x) {
$original = $x;
$reversed = 0;
while ($x > 0) {
$last_digit = $x % 10;
$reversed = $reversed * 10 + $last_digit;
$x = (int)($x / 10);
}
return $original == $reversed;
}
}
Решение на Csharp
public class Solution {
public bool IsPalindrome(int x) {
int original = x;
int reversed = 0;
while (x > 0) {
int lastDigit = x % 10;
reversed = reversed * 10 + lastDigit;
x = x / 10;
}
return original == reversed;
}
}