--- tags: LeetCode --- # 9. Palindrome Number 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?** 輸入範本如下 ```C# public class Solution { public bool IsPalindrome(int x){ } } ``` ### 直覺想法 1. 因為題目要求不能把數字轉成字串. 所以只能透過餘數運算去取值. 因為要判斷是否為迴文 , 因此倒過來取值 , 若此此數字與原來的數字相同 , 則此數字是回文. ```C# 60 ms 15.9 MB You are here! Your runtime beats 84.28 % of csharp submissions public bool IsPalindrome(int x) { if (x < 0) { return false; } long reverse = 0, temp = x; while (temp != 0) { reverse = reverse * 10 + (temp % 10); // 結果可能會超過 int.MaxValue , 所以使用 long temp /= 10; } return reverse == x; } ``` 2. 每次取出最左以及最右的數字比較 , 若不同 , 此數字非回文 , 若相同 , 則繼續比較. ```C# 56 ms 15.8 MB You are here! Your runtime beats 93.52 % of csharp submissions. public bool IsPalindrome(int x) { if (x < 0) { return false; } int div; for (div = 1; (x / div) >= 10; div *= 10) ; // 找到 x 的位數 , 若 x 為個位數 , div 不應該 *10 while (x > 0) { int left = x / div, right = x % 10; if (left != right) { return false; } x = (x % div) / 10; // 取出除了左與右外的數字. div /= 100; // 因為少了兩個位數 , 所以 div 要除 100 } return true; } ``` ### Thank you! You can find me on - [GitHub](https://github.com/s0920832252) - [Facebook](https://www.facebook.com/fourtune.chen) 若有謬誤 , 煩請告知 , 新手發帖請多包涵 # :100: :muscle: :tada: :sheep: