判断一个整数是不是回文

题目

判断一个整数是不是回文,在判断过程中不要使用额外空间。

**示例1:**

```
输入: num = 1221
输出: true
```


## 解题方案

**标签:** Math

**思路1:**

 - 我们假设负数不是回文,以及int变量不属于额外空间
 - 我们很容易想到一种方法,它贴近于我们日常判断回文的方法,一次判断对应的两位,即逐位判断

 1     bool isPalindrome(int num)
 2     {
 3         if (num<0)
 4           return false;
 5         int base=1;
 6         while (num/base >= 10)
 7             base *= 10;
 8         while (num!=0)
 9         {
10             if (num/base != num%10)
11                 return false;
12             num=(num%base) / 10;
13             base /= 100;
14         }
15         return true;
16     }    

**思路2:**

 - 首先,经过了之前的反转习题,看到今天这道题我们很容易想到,将整数(以下记为A)反转,然后进行比较即可。
 - 这里参考了discuss中的一个代码,因为它有一个相较不错的避免溢出的方法
 
 **代码:**

 1 bool isPalindrome(int num)
 2 {
 3     if(num < 0)
 4         return false;
 5     int temp1 = num;
 6     int temp2 = 0;
 7     while(temp1 >= 10)
 8     {    
 9         temp2 *= 10;
10         temp2 += temp1%10;
11         temp1 /= 10;
12     }
13     return temp2 == num/10 && temp1 == num%10;
14 } 

 

 


 
## 参考资料

- https://discuss.leetcode.com/topic/9477/o-1-space-o-lgn-time-java-solution-no-overflow-risk/20

posted @ 2017-10-31 18:42  Babetterdj  阅读(379)  评论(0编辑  收藏  举报