Determine whether an integer is a palindrome.
An integer is a palindrome when it reads the same backward as forward.
input: 數字
output: 看看是不是回文
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?
如何解
用 Two pointer 想這題變得非常容易,先轉成 array 然後前後比,不一樣就 return false
var isPalindrome = function(x) {
if(x < 0) return false;
let arr = x.toString().split('')
let pointer = 0;
let ind = arr.length - 1;
while(pointer <= ind){
if(arr[pointer] !== arr[ind]){
return false
}
pointer ++;
ind --;
}
return true;
};
console.log(isPalindrome(13331))
// Runtime: faster than 50.40% of JavaScript online submissions
改善
題目有說 Coud you solve it without converting the integer to a string? 的確多花了一些時間想,記得之前 202 Happy Number 曾經拆解過 Number,這題其實也一樣
var isPalindrome2 = function(x) {
if(x < 0) return false;
let digits = 1;
// 先算出有幾位數 結果得到 digits = 10000
while(x / digits >= 10){
digits *= 10;
}
while(x > 0){
let first = Math.floor(x / digits);
let last = x % 10;
if(first !== last){
return false
}
x = Math.floor(x%digits / 10);
// 因為比完頭尾所以少了兩位數 / 100
digits = digits/100;
}
return true;
}
// Runtime: 184 ms, faster than 80.40% of JavaScript online submissions