Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
Example 1:
Example 2:
Example 3:
Follow up:
Coud you solve it without converting the integer to a string?
Related Topics: Math
既然是判斷回文,那麼直覺作法就是比頭尾是否相同,如果轉字串實做會變得很簡單,所以我就直接做 Follow up 要求了。
取尾數比較常見使用 mod (%) 即可。但取最高數的頭則比較麻煩,以 20001 為例,想取出最高位數,則必須計算 20001 // 10000 ,而除數 10000,其實可以換成這樣表示 。但另一個問題是,被除數是 int 沒有 len 這個函數,因此實際計算時改用迴圈計算被除數除以 10 直到小於 10 的次數,即為 len(被除數)-1 的值。
最後比較結束後,會將比較數字(e.g. 20001)去頭尾,並將除數(10000)除以 100 ,因為這個除數是對應比較數字長度,我將比較數字去頭尾,因此除數也必須至少有兩位數。
一開始的判斷是判斷兩種 case:
除比頭尾外,另一個想法是翻轉後兩數直接相比,個人推測這種方法的效能應該會比較好。
果然效能好很很多,從 88 ms/60.57 % 提升到 56 ms/ 99.10% 。
本文作者: 辛西亞.Cynthia
本文連結: 辛西亞的技能樹 / hackmd 版本
版權聲明: 部落格中所有文章,均採用 姓名標示-非商業性-相同方式分享 4.0 國際 (CC BY-NC-SA 4.0) 許可協議。轉載請標明作者、連結與出處!