zoukankan      html  css  js  c++  java
  • 9-判断一个整数是否是回文数

    题目:

    9-判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

    示例 1:
    输入 : 121
    输出 : true

    示例 2 :
    输入 : -121
    输出 : false
    解释 : 从左向右读, 为 - 121 。 从右向左读, 为 121 - 。因此它不是一个回文数。

    示例 3 :
    输入 : 10
    输出 : false
    解释 : 从右向左读, 为 01 。因此它不是一个回文数。
    进阶 :

    你能不将整数转为字符串来解决这个问题吗?

    解答:

    方法一

    依次/10得到每位数字,然后放到容器中,遍历比较

    负数不可能为回文数

    小于10的直接返回true

    bool isPalindrome(int x) 
    {
        if (x < 0)
            return false;    //负数不可能滴
        else if (x < 10)
            return true;
        
        vector<char> vec;
        while (x > 0)
        {
            vec.push_back(x % 10);
            x = x / 10;
        }
        for (int i = 0; i < vec.size()/2; i++)
        {
            if (vec[i] != vec[vec.size() - i - 1])
            {
                return false;
            }
        }
    
        return true;
    }

    效率较差,且占用内存较多

    改进一:

      将依次得到的个位数倒序组成一个新的int,例如:12321,从右侧得到的数字依次组成123xx,最后判断是否与原输入相等。注意:在组成新数字时,需要判断是否溢出。

      个位数为零的也不可能是,因为最高位不可能为零。

    bool isPalindrome2(int x)
    {
        if (x < 0)
            return false;    //负数不可能
        else if (x < 10)
            return true;
    
        //个位为零的也不可能是,因为最高位不可能是0
        if (x % 10 == 0)
            return false;
    
        int y = 0;
        int tmp = x;
        while (tmp > 0)
        {
            if (y > INT_MAX / 10)//需要判断是否溢出!!!如果溢出了肯定不是,因为输入数字没溢出
                return false;
            y = y * 10 + tmp % 10;
            tmp = tmp / 10;
        }
        
        return x == y;
    }

    改进二:

    上面的比较次数太多了,可以比较数字长度的一半:

    bool isPalindrome3(int x)
    {
        if (x < 0)
            return false;    //负数不可能
        else if (x < 10)
            return true;
    
        //个位为零的也不可能是,因为最高位不可能是0
        if (x % 10 == 0)
            return false;
    
        int y = 0;
        while (x > 0)
        {
            if (y > INT_MAX / 10)//需要判断是否溢出!!!如果溢出了肯定不是,因为输入数字没溢出
                return false;
            y = y * 10 + x % 10;
            x = x / 10;
    
            if (y == x)
                return true;
            else if (y > x)
            {
                y /= 10;
                return x == y;
            }
        }
    
        return false;
    }
  • 相关阅读:
    宁要捧杀,不许真言?
    (已加马赛克)10 行代码判定色*情*图片——Python 也可以系列之二
    推荐几个好玩又有难度的编程网站
    自己动手写算法.Sort.QuickSort
    自己动手写算法.Sort.Bubble
    [Python]五分钟理解元类(Metaclasses)
    [招聘]我司求 python 或 flex 程序员各一名
    Debian的软件包管理工具命令不完全列表
    EdtiPlus最好用的文本编辑器+使用技巧集萃
    为什么美国Microsoft盗版少?
  • 原文地址:https://www.cnblogs.com/zyk1113/p/13952470.html
Copyright © 2011-2022 走看看