概述
Palindrome Number 判断文字是否是回文,输出布尔值。
分析
作为一道 Easy
的题目,看起来并不是特别麻烦,不过这题要求无需增加附加的空间复杂度。
题目要求判断是否为回文数,那么负数肯定不是回文数,因为负数带有符号位。
从字符串的角度来看,回文只需判断反转之后是否相同即可,那么针对数字亦可以使用这一方法。
考虑到数字反转之后会出现溢出的情况,而正数溢出之后在 Java 中的处理方式则是变为一个负数(参见 SO 上的问题 How does Java handle integer underflows and overflows and how would you check for it?),那么反转后变为负数的数字自然不是一个回文数了,因为反转之后在非负整数的范围内显然这个数字不存在。
不新增变量的情况下,只能通过递归来解决问题了。
解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public class Solution { public static int len(int v) { return (v == 0 ? 0 : 1 + len(v / 10)); } public static int reverse(int x) { if (x < 10) { return x; } return reverse(x / 10) + (x % 10) * (int)Math.pow(10, len(x) - 1); } public boolean isPalindrome(int x) { if (x < 0) { return false; } if (x == 0) { return true; } return x == reverse(x); } } |