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

![](/files/-LqwVPKMCI3kiezlIUEp)

![](/files/-LqwVSsBXITagA2QjA97)

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

![](/files/-LqwVXFZJXA4Mx_z0vAL)

![](/files/-LqwVZQ5SnU-s2YAmFGG)

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

### 學到什麼 ?

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hannahpun.gitbook.io/leetcode-note/math/9-palindrome-number.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
