iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
自我挑戰組

用java解Leetcode系列 第 9

用java解Leetcode Day9

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20250923/20169501J2f6KAloMj.pnghttps://ithelp.ithome.com.tw/upload/images/20250923/201695012LlPWZ61xy.png

  1. Palindrome Number
    這題要求去判斷一個給定的整數x是否為迴文數。迴文數是指從左向右讀和從右向左讀都相同的數字。如果是正數的話:像121就是迴文數,因為從左讀是121,從右讀也是121;如果是負數:任何負數都不是迴文數,因為它們前面都有一個負號,例如:-121,從左往右是-121,但從右往左是121-,兩者不相同;如果是一個個位數為0的正數(且本身不為0),這也不是迴文數,例如:10,從左往右是10,但從右往左是01,兩者不相同。
    這題還有一個進階要求:不要將整數轉換成字串來解決。

為了解開這題,並且不使用將整數轉換成字串這個方法,需要用數學的方法來反轉數字的一部分或全部。這有兩種常見的解法,但其中一個雖然直觀,但有潛在的溢位風險(處理大數字時,可能會超出int類型的最大值,導致溢位),所以我選擇了另一個更通用、更保險的解法。

解法:反轉一半數字,這個方法不需要反轉整個數字,只需要反轉它的一半。首先,先做特殊情況判斷,如果x小於0,直接回傳false;如果x的個位數是0(且x本身不為0),也直接回傳false,例如:10, 20, 30。接著,是反轉的過程,要建立一個變數reversed,初始值為0,再來,透過一個while迴圈,每次將x的個位數取出,加到reversed的末尾,當reversed大於或等於x時,表示已經處理一半或更多,此時迴圈結束。在迴圈結束後,要判斷結果,有兩種方法可以判斷是否為迴文數,1.如果是偶數位數,例如1221,x和reversed應該要相等,迴圈結束時,x = 12, reversed = 12;2.如果是奇數位數的數字,例如121,x和reversed的值會相差一位,迴圈結束時,x = 1, reversed = 12,這時需要將reversed除以10,去掉中間位數,在和x比較,也就是x == reversed / 10。
這個方法的優點是避免了整數溢位,如果反轉整個數字的話,就有可能發生溢位(也就是方法二)。


上一篇
用java解Leetcode Day8
下一篇
用java解Leetcode Day10
系列文
用java解Leetcode14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言