标签:
空间复杂度为O(1)的条件下,如何判断一个数是否回文。
【方法1】最好的方法如下,可以避免溢出的风险
public class Solution { public boolean isPalindrome(int x) { if (x < 0 || (x != 0 && x % 10 == 0)) { return false; } int reverse = 0; while (x > reverse) { reverse = reverse * 10 + x % 10; x /= 10; } return x == reverse || x == (reverse / 10); } }
上面这种方法的关键思想是把n位的数字,分成位数相差之多为1的两部分(循环结束的条件很重要,可以保证两个数位数相差至多为1),然后比较,如果x是回文数,并且位数为偶数,那么x一定等于reverse,如果x是回文数,并且位数为奇数,那么x一定等于reverse / 10。
【方法2】下面这种方法,存在溢出的问题
public class Solution { public boolean isPalindrome(int x) { if (x < 0) { return false; } int reverse = 0, tmp = x; while (x != 0) { reverse = reverse * 10 + x % 10; x /= 10; } return reverse == tmp; } }
【方法3】改进后的方法2如下,可以避免溢出的风险
public class Solution { public boolean isPalindrome(int x) { if (x < 0) { return false; } int tmp = x, reverse = 0; while (tmp >= 10) { reverse = reverse * 10 + tmp % 10; tmp /= 10; } return reverse == x / 10 && tmp == x % 10; } }
方法3,避免了最后一次操作,从而消除了溢出的风险。
标签:
原文地址:http://www.cnblogs.com/truezion/p/4421065.html