• 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;
    }
  • 相关阅读:
    java异常处理
    java基础知识和面试
    mysql 坐标查询计算距离
    TypeScript设计模式之工厂
    TypeScript设计模式之单例、建造者、原型
    从C#到TypeScript
    从C#到TypeScript
    【译】Nodejs最好的ORM
    【开源】NodeJS仿WebApi路由
    从C#到TypeScript
  • 原文地址:https://www.cnblogs.com/zyk1113/p/13952470.html
Copyright © 2020-2023  润新知