leetcode : Palindrome Number
runtime 11 ms, beats 92.38% of cpp submissions
O(log(n)) solution with explanation
tags: number
🔗 link
📖 description
給定一個 32 bit 的數字 x (sighed),判斷是否為回文數字
ex. 121 -> 121 (回文) -121 -> 121- (非回文)
🧠 solution
check head and tail
這題可以跟回文字串一樣使用字串的形式來檢測,看頭跟尾的數字是否相等,但因為數字不像 string 可以確定頭尾,所以需要一些額外時間去找,這樣做的好處是可以提早找到不合的,或許能更早結束。
revert half
也可以換一種想法,只要把數字反轉並看看是否與原數字相等就可以了。
ex. 121 -> 121 (相等) 123 -> 321 (不相等)
此方法還可以進一步加速,只需要轉換一半,確認原數字的左半與右半是否相等。
⏳ time complexity
兩種方法的時間複雜度都與輸入數字的位數有關 O(log(n)) (此處的 log 以 10 為底)
總時間複雜度 O(log(n))
📝 code
check head and tail
1 | class Solution { |
revert half
1 | class Solution { |