• LeetCode 9. Palindrome Number


    问题链接

    LeetCode 9. Palindrome Number

    题目解析

    判断一个数字是否是回文数字。

    解题思路

    题目已经给出很多提示和注意事项,还要求不能使用额外空间,其实就是想说请直接在数字上操作,不能转换成字符串。另外题目说明直接反转数字会超出范围,其实用long long表示反转结果完全没问题,但是我们要理解出题人的意思——不可以反转!

    可以一位一位进行比较,通过取整和取余可以获得对应位置的两个数字,进行比较即可。

    参考代码

    class Solution {
    public:
        bool isPalindrome(int x) {
            if (x < 0) return false;
            
            int div = 1;
            while (x / div >= 10) div *= 10;
            while (x > 0) {
                int l = x / div;
                int r = x % 10;
                if (l != r) return false;
                x = (x % div) / 10;
                div /= 100;
            }
            return true;
        }
    };
    

    官方解法

    官方链接:一半反转

    为了避免反转之后超出范围,采用反转一半数字的方法,也可以比较得出结果。官方是C#代码,这里改写成C++,二者一模一样哈哈哈。

    什么时候确定已经达到一半了呢?比较x小于revertedNumber的时候就是了。还需要注意一个问题,数字如果是奇数位的话,得到的revertedNumber将会是x的10倍。然后又发现这样过不了样例数字“10”,那就在最初判断数字时剔除这种情况即可。

    Complexity Analysis

    Time complexity : (O(log_{10}n)). We divided the input by 10 for every iteration, so the time complexity is (O(log_{10} n))

    Space complexity : (O(1)).

    参考代码

    class Solution {
    public:
        bool isPalindrome(int x) {
            if (x < 0 || (x%10 == 0 && x != 0))//注意判断条件
                return false;
            
            int revertedNumber = 0;
            while(x > revertedNumber) {
                revertedNumber = revertedNumber * 10 + x % 10;
                x /= 10;
            }
            
            return x == revertedNumber || x == revertedNumber/10;//两种情况
        }
    };
    

    LeetCode All in One题解汇总(持续更新中...)

    本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.


  • 相关阅读:
    把程序的定义与实现部分用头文件与源文件分开
    简单控件的应用(二)—学生管理系统
    Java基础14
    创建插入符、输出不同效果的文字
    Java基础12
    简单控件的应用(一)—prj计算器
    简单的Win 32 Application
    最简单的音乐播放器
    消息处理初步
    基于MFC,在非客户区与客户区利用CButon类创建button
  • 原文地址:https://www.cnblogs.com/AlvinZH/p/8543670.html
Copyright © 2020-2023  润新知