题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1: 输入: 121 输出: true
示例 2: 输入: -121 输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3: 输入: 10 输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数
解析一:根据题目,所谓的回文数即指正序和倒序读都是一样的整数,即将数字前后整体颠倒后,依然不变,故可以想到用数组的reverse()方法进行转换, 然后判断。
var isPalindrome = function(x) {
let str =x.toString();
let res_str =str.split("").reverse().join("");
return str ==res_str;
};
解析二:不利用字符串
var isPalindrome = function(x) {
let res = 0;
let x_rema = x;
while (x_rema> 0) {
s = s * 10 + x_rema% 10;
x1 = parseInt(x_rema/ 10);
}
return s == x;
};
解析三:中心扩展法,从中间开始比较然后一直向两端移动
var isPalindrome = function(x) {
if (x < 0) {
return false;
}
let str = String(x);
let len = str.length
let mid = parseInt(len / 2);
let left = mid - 1;
let right = len % 2 ? mid + 1 : mid;
while (left >= 0) {
if (str[left] !== str[right]) {
return false;
}
left--;
right++;
}
return true;
};
解析四:双指针法,比较开头和结尾,然后分别向右和向左移动,并依次作比较
var isPalindrome = function(x) {
let str = x.toString();
let n = str.length;
let left = 0;
let right = n-1;
while(left < right){
if(str[left++] != str[right--]){
return false;
}
}
return true;
};
本文章仅作为个人的学习记录,具体解题思路请查看以下网址!
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/palindrome-number