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数字字符的全半角转化
    mysql 的group by 满足的规则要求:
    从指定字符串获取n个随机数
    jQuery去除空格的$.trim()
    mysql里的位运算小结
    sql的case 用法
    泛型之元组示例
    jQuery里的replaceAll和replaceWith
    根据索引条件查询结果与原表关联的查询
  • 原文地址:https://www.cnblogs.com/chailinbo/p/7472724.html
Copyright © 2011-2022 走看看