---
description: >-
  用 two pointer 方向想真的變的好容易阿 / 拆解 Number 13331 要得到前後的 1 就是 
  Math.floor(13331/10000)、 13331 % 10
---

# # 9 Palindrome Number (有圖)

[LeetCode](https://leetcode.com/problems/palindrome-number/)

```
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

![](https://1787585077-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LqirD3iAZIDk4oDCfwS%2F-LqwVI_Pg1OyMWPamRVR%2F-LqwVPKMCI3kiezlIUEp%2F39.jpg?alt=media\&token=b027d4b8-0bc4-4be4-a5b9-23c3c607d669)

![](https://1787585077-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LqirD3iAZIDk4oDCfwS%2F-LqwVI_Pg1OyMWPamRVR%2F-LqwVSsBXITagA2QjA97%2F40.jpg?alt=media\&token=728dd195-4e5c-414a-b38f-ef35ba7ea6d9)

```
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，這題其實也一樣

![](https://1787585077-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LqirD3iAZIDk4oDCfwS%2F-LqwVI_Pg1OyMWPamRVR%2F-LqwVXFZJXA4Mx_z0vAL%2F41.jpg?alt=media\&token=9097b2c0-eaa9-4473-9919-c602adcb2442)

![](https://1787585077-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LqirD3iAZIDk4oDCfwS%2F-LqwVI_Pg1OyMWPamRVR%2F-LqwVZQ5SnU-s2YAmFGG%2F42.jpg?alt=media\&token=dacf8cbe-56cd-4921-8a48-61585e79aa3e)

```
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
```

### 學到什麼 ?

再一次練習如何拆解數字而不是轉字串又轉陣列運算
