leetCode EASY - Q9. Palindrome Number - === ![](https://s2.51cto.com/images/blog/202108/03/d41ce0d2323853fe7d9868daf22eac2f.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/format,webp) --- ###### tags: `leetCode`, `練習刷題`, <br> ## 題目 Given an integer x, return true if x is a palindrome , and false otherwise. Example 1: Input: x = 121 Output: true Explanation: 121 reads as 121 from left to right and from right to left. Example 2: Input: x = -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: x = 10 Output: false Explanation: Reads 01 from right to left. Therefore it is not a palindrome. ## 講解: 簡單地說就是如果輸入的數字是前後可以倒轉依然是相同數字的話,那就回傳 true,但只適用 3位數罷了。相較的都是false 包含標點符號。 ## 我的答案: ``` var isPalindrome = function(x) { if(x <0) return false; let singleNum = x.toString().split(''); const fontReverse = [...singleNum].reverse(); return singleNum.join('') === fontReverse.join(''); }; ``` 1. 如果 x 是負數,則將返回 false,因為 負數的符號不等於string。會判別不到。 2. 將數字轉為字串,然後拆分成陣列。 3. 複製陣列並反轉,避免更改原陣列。 4. 比較兩個陣列轉換成字串後,是否相同。 --- ## 別人的解答: ``` var isPalindrome = function(x) { if (x < 0){ return false } let strX = x.toString(); for(let left = 0, right = strX.length - 1; left < right; left++, right--) { if(strX[left] !== strX[right]) { return false; } } return true } ``` 1. 一樣,如果是負數的話,就直接return false。 2. 然後把x 轉換成string。 3. 下面逐步解釋這個函數的工作原理: - 用兩個指標從兩邊向中心檢查: **for (let left = 0, right = strX.length - 1; left < right; left++, right--) {** - 這個 for 迴圈初始化兩個指標:left 從字串的開始位置(0),而 right 從字串的末尾開始。迴圈繼續執行直到 left 指標小於 right 指標。 比較字符: ``` if (strX[left] !== strX[right]) { return false; } ``` - 在迴圈中,檢查由 left 和 right 指向的字符是否相等。如果在任何時候這些字符不匹配,這意味著數字不是回文,函數返回 false。 迴圈完成後返回 true: return true; - 如果迴圈順利完成,且所有對應的字符都相等,則函數返回 true,表示數字是回文。