問題
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.
https://leetcode.com/problems/palindrome-number/
自分の解答
public boolean isPalindrome(int x) { if (x < 0) { return false; } int number = x; long reversed = 0; while (number != 0) { int pop = number % 10; number /= 10; reversed = reversed * 10 + pop; } return reversed == x; }
コード理解
別解
public boolean s(int x) { if (x < 0 || (x % 10 == 0 && x != 0)) { return false; } int revertedNumber = 0; while (x > revertedNumber) { revertedNumber = revertedNumber * 10 + x % 10; x /= 10; } return x == revertedNumber || x == revertedNumber / 10; }
Time : O() / Space : O(1)
Stringに変えずにできたのは◯。ただし、今回のケースだと数値の桁の半分見れば答えは出せるはずのところを全桁チェックしてしまっていた。
別解ではそこを半分だけ見て、さらに奇数のときのケアを x == revertedNumber / 10
のように行っている
今後のための考え方
- 回文は半分だけチェックすればよい
- 奇数/偶数をケアすべし