Palindrome Number问题

Palindrome Number问题

1.问题描述

Determine whether an integer(整数) is a palindrome(回文). Do this without extra space.
题目翻译:
确定一个整数是不是回文数,不能使用额外的空间。

2.解题思路

1.把整数直接转成字符串,然后把字符串reverse一下,比较两个字符是否相等就能完成这道题。但是题目中说不能使用额外的空间,也就是说这种思路不可行。
2.把这个整数反转过来,然后比较翻转后的整数是否相等就可以,这种思路可行。但是反转整数的过程中可能遇到 整数溢出的问题,所以要处理好这个问题就可以解决,但同时一旦发生溢出,那么这个整数就不是回文数了。
3.无论是回文数还是回文串,都是对称的,但是需要处理好奇对称、偶对称问题,这样只需要反转整数的一半就可以实现对回文数的判断。

3.代码

1.反转数字,检查是否越界

  1. // 
  2. class Solution
  3. public boolean isPalindrome(int x)
  4. int res=0
  5. int tmp=0,sign=1
  6. int sa=x; 
  7.  
  8. if(x<0)//小于0的数都不是回文数 
  9. return false
  10.  
  11. while(x!=0){ 
  12. tmp = res*10+x%10
  13. if(tmp/10!=res)//为了判断是否发生整数越界 
  14. return false
  15. x=x/10
  16. res=tmp; 

  17. return res*sign==sa; 


2.反转一半数字,检查是否相等
这里在实现的时候出现了一个问题,会把200、1000这类的数字误判为回文数。

  1. class Solution
  2. public boolean isPalindrome(int x)
  3. if(x<0||x%10==0&&x/10!=0)// 
  4. return false
  5. int res=0
  6. while(x>res){ 
  7. res = res*10+x%10
  8. x=x/10

  9. return x==res||x==res/10;//为了处理奇对称、偶对称问题。 


  10. //对上面的代码进行的简单优化 
  11. class Solution
  12. public boolean isPalindrome(int x)
  13. if(x==0
  14. return true
  15. if(x<0||x%10==0)//处理10的整数倍问题 
  16. return false
  17. int res=0
  18. while(x>res){ 
  19. res = res*10+x%10
  20. x=x/10

  21. return x==res||x==res/10;//为了处理奇对称、偶对称问题。 


posted @ 2017-09-04 11:19  流泉滴沙  阅读(186)  评论(0编辑  收藏  举报