算法:回文数字9. Palindrome Number
LeetCode全集请参考:
题目
Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.
Follow up: Could you solve it without converting the integer to a string?
Example 1:
Input: x = 121 Output: true Example 2:
Input: x = -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: x = 10 Output: false Explanation: Reads 01 from right to left. Therefore it is not a palindrome. Example 4:
Input: x = -101 Output: false Constraints:
-231 <= x <= 231 - 1 全部求余数解法
用上回得到的结果乘以10,加上x除以10余数,得到的最终结果,和x比较即可。
class Solution { public boolean isPalindrome(int x) { // check edge if (x < 0) { return false; } int reverse = 0; int copy = x; while (copy > 0) { int last = copy % 10; reverse = reverse * 10 + last; copy = copy / 10; } return reverse == x; } } 折半求余数解法
实际上只要折半后就能得到结果,也就是x > reverse。
这里需要注意,除以10整除的数,都不行。
class Solution { public boolean isPalindrome(int x) { // check edge if (x < 0 || (x > 0 && x % 10 == 0)) { return false; } int reverse = 0; while (x > reverse) { int last = x % 10; reverse = reverse * 10 + last; x = x / 10; } return x == reverse || x == reverse / 10; } }