zoukankan      html  css  js  c++  java
  • 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;//为了处理奇对称、偶对称问题。 


  • 相关阅读:
    【Java学习笔记】I/O体系
    【Java学习笔记】几个实用类
    【Java学习笔记】内部类
    【Java学习笔记】对象的序列化和反序列化
    【Java学习笔记】数组的相关事项
    【Java学习笔记】由String str=”abc”引出的故事
    【Java学习笔记】上转型与下转型
    【Java学习笔记】枚举类型
    【Java学习笔记】集合类
    Maven的settings.xml中为HTTP和HTTPS配置代理服务器【转】
  • 原文地址:https://www.cnblogs.com/chailinbo/p/7472724.html
Copyright © 2011-2022 走看看