一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第13天,点击查看活动详情。
题目
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121 输出:true 示例 2:
输入:x = -121 输出:false 解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3:
输入:x = 10 输出:false 解释:从右向左读, 为 01 。因此它不是一个回文数。
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/pa… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析
-
回文数即左右对称,左边第
i个数等于右边第end-i个数 -
数字个数可能是奇数、也可能是偶数
-
正负号也计算在内,
-121不为回文数
思路
既然正负号计算在内,就无需额外考虑去掉符号,只需要保证数字的左右对称即可
奇数偶数位的数字都是从左侧和右侧开始遍历都一直相等,直到两侧的遍历相遇,若有一位不相等,即为非回文数
左右两侧遍历即双指针解法,需要将数字先转换成字符串,用于遍历,两个指针分别从左侧和右侧开始对应着对称的两个数字,退出条件即为两个指针相遇;
代码实现
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
const str = x+''; // 将数字转换为字符串,字符串可以遍历
head = 0; // 头指针指向左端
tail = str.length-1; // 尾指针指向右端
while(head<tail){ // 双指针相遇了,则为回文数
if(str[head]!==str[tail]) // 不相等则不为回文数
return false;
head++; // 左右各进一位
tail--;
}
return true;
};
结果
解法二:reverse
reverse是数组方法,用于倒转数组,这里可以直接将数字转化为数组,倒转后再拼接成字符串然后再比对是否一致
代码:
/**
* @param {number} x
* @return {boolean}
*/
var isPalindrome = function(x) {
return x+'' === (x.+'').split('').reverse().join('')
};
这样写简洁很多~
解法二结果
估计是因为中间要创建数组,所以空间复杂度略大了些