- 时间:2019-07-25
- 题目链接:https://leetcode.com/problems/palindrome-number/submissions/
- tag:
Math
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
Example 1:
Input: 121
Output: true
Example 2:
Input: -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: 10
Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.
Follow up:
Coud you solve it without converting the integer to a string?
转成字符串方式
- 负数都是非回文数,10的整数倍不是回文。
- 将数字转为字符串,再逆序排列字符串。两者比较,相等就是回文数。
直接操作整数方式
- 复制x到temp;
- 取temp末尾数字,方式为temp与10的求余;组成新数reverse;
- 每取完一位,temp缩小10倍并且去掉小数。
- reverse要
先扩大十倍
再加上取下来的数 - 当temp === 0时,表示已经取完;reverse与x比较
参考JavaScript代码:
/**
* @param {number} x
* @return {boolean}
* 转成字符串
*/
var isPalindrome = function(x) {
if(x < 0 ) return false;
if(x === 0) return true;
if(x % 10 === 0) return false;
let reverse = '';
let str = String(x);
for(let i = str.length - 1; i >= 0; i--) {
reverse += str[i]
}
return str === reverse
};
/**
* @param {number} x
* @return {boolean}
* 不转成字符串
*/
var isPalindrome = function(x) {
if(x < 0 ) return false;
if(x === 0) return true;
if(x % 10 === 0) return false;
let temp = x;
let reverse = 0;
while(temp > 0) {
let num = temp % 10;
temp = (temp - num)/10; // 或 temp = (temp / 10) >> 0,去除小数位
reverse = reverse * 10 + num
}
return x === reverse
};
暂缺