zoukankan      html  css  js  c++  java
  • 9:回文数(C++)

    题目地址:https://leetcode-cn.com/problems/palindrome-number/

    题目描述

    给你一个整数 x ,如果 x 是一个回文整数,返回 ture ;否则,返回 false 。

    回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。

    题目示例

    示例 1:

    输入:x = 121
    输出:true
    示例 2:

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

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

    输入:x = -101
    输出:false

    解题思路

    特殊情况处理:

    • 所有的负数均不是回文数;
    • 个位数为0的数字不是回文数(除数字0本身之外);

    思路1:将数字转换成字符串,并判断字符串是否是回文数即可,这种做法需要额外的空间。

    思路2:反转数字本身,并判断反转之后的数字是否与原数字相等,若相等,则为回文数,但这种做法可能导致溢出,比如数字x>INT_MIN时。

    思路3:对思路2进行改进,只反转数字的一半,其中反转的数字后一半部分与前一半值相同,例如数字1221,将其后半部分的21反转为12,并将其与前半部分12进行比较,因为二者相同,所以数字1221为回文数。如何知道数字的位数已经达到原始数字位数的一半?时间复杂度O(logn),空间复杂度O(1)

    • 数字长度为奇数时,不断将原始数字除以10,然后给反转后的数字乘以10。如12321,此时将反转后数字除以10,当原始数字小于反转数字时,意味着已经处理了一半位数的数字了;
    • 数字长度为偶数时,不断将原始数字除以10,然后给反转后的数字乘以10。如1221,当原始数字等于反转数字时,意味着已经处理了一半位数的数字了;

    程序源码

    思路1

    class Solution {
    public:
        bool isPalindrome(int x) {
            if(x < 0) return false;
            string s = to_string(x);
            string temp = s;
            std::reverse(temp.begin(), temp.end());
            if(temp == s) return true;
            else 
                return false;
            return true;
        }
    };

    思路2

    class Solution {
    public:
        bool isPalindrome(int x) {
            if(x < 0 || (x % 10 == 0 && x != 0)) return false; //临界条件
            int reverseNumber = 0;
            while(x > reverseNumber)
            {
                reverseNumber = reverseNumber * 10 + x % 10; //反转后的数字计算
                x /= 10;
            }
            //当数字长度x的位数为奇数时,我们可以通过reverseNumber / 10将中间那位数去除
            //例当输入为 12321 时,在 while 循环的末尾我们可以得到 x = 12,revertedNumber = 123
            //由于处于中位的数字不影响回文(它总是与自己相等),所以我们可以简单地将其去除。
            return x == reverseNumber || x == reverseNumber / 10;
        }
    };

    参考文章

    https://leetcode-cn.com/problems/palindrome-number/solution/hui-wen-shu-by-leetcode-solution/

    ----------------------------------- 心之所向,素履所往;生如逆旅,一苇以航。 ------------------------------------------
  • 相关阅读:
    Matlab 绘制三维立体图(以地质异常体为例)
    Azure DevOps的variable group实现array和hashtable参数的传递
    Azure DevOps 利用rest api设置variable group
    Azure AADSTS7000215 其中一种问题的解决
    Power BI 实现实时更新Streaming Dataset
    AAD Service Principal获取azure user list (Microsoft Graph API)
    Matlab 沿三维任意方向切割CT图的仿真计算
    Azure Powershell script检测登陆并部署ARM Template
    Azure KeyVault设置策略和自动化添加secrets键值对
    Azure登陆的两种常见方式(user 和 service principal登陆)
  • 原文地址:https://www.cnblogs.com/wzw0625/p/14375439.html
Copyright © 2011-2022 走看看