题记:
给你一个整数 x
,如果 x
是一个回文整数,返回 true
;否则,返回 false
。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121
是回文,而 123
不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
提示:
-2 ^ 31 <= x <= 2 ^ 31 - 1
进阶:你能不将整数转为字符串来解决这个问题吗?
题目来源: https://leetcode.cn/problems/palindrome-number/description/
解题方法:
方法一:转换为字符串,分别从头尾开始比较
class Solution {
/**
* @param Integer $x
* @return Boolean
*/
function isPalindrome($x) {
if($x < 0){
return false;
}
$x = strval($x); //转换为字符串
$length = strlen($x);
for($i = 0; $i < $length / 2; $i++) { //从头开始,对比一半即可
$j = $length - 1 -$i; //从末尾开始
if($length % 2 != 0) { //为奇数个作对比
if ($j > intval($length / 2)){ //最中间一位不需要对比
if($x[$i] != $x[$j]) {
return false;
}
}
}else{ //为偶数个做对比
if ($j >= $length / 2){ //一直对比到最中间的两位
if($x[$i] != $x[$j]){
return false;
}
}
}
}
return true;
}
}
//上述方法代码其实可以简化为如下:
function isPalindrome($x) {
if($x < 0){
return false;
}
$x = strval($x); //转换为字符串
$length = strlen($x);
for($i = 0; $i < $length / 2; $i++) { //从头开始,对比一半即可
$j = $length - 1 -$i; //从末尾开始
if($x[$i] != $x[$j]) {
return false;
}
}
return true;
}
方法二:判断反转后的数据与原数据的差是否为0
function isPalindrome($x) {
if ($x < 0 || $x - (int)strrev($x) != 0) return false;
return true;
}
//科学计算反转
class Solution {
/**
* @param Integer $x
* @return Boolean
*/
function isPalindrome($x) {
if($x < 0 || $x - $this->reverse($x) != 0) return false;
return true;
}
//反转函数
function reverse($x) {
$rev = 0;
while ($x >=1 ) {
$pop = $x % 10;
$x /= 10;
$rev = $rev * 10 + $pop;
}
return $rev;
}
}