美文网首页算法与C++
Leetcode9. Palindrome Number

Leetcode9. Palindrome Number

作者: Vophan | 来源:发表于2019-01-25 22:36 被阅读4次

    每日必刷

    题目

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

    思路

    这是一道很简单的题,我们只需要考虑到一些特殊情况,比如说负数不是回文数,还有最后一位为0的非零数,还有0
    考虑到这些以后,解题就很简单了。
    我的思路是,像昨天那道题,直接化为字符串,这样就直接忽略了负数的情况,然后翻转字符串,就很简单了。

    代码

    static int x = [](){ios::sync_with_stdio(false); cin.tie(nullptr); return 0; }();
    
    class Solution {
    public:
        bool isPalindrome(int x) {
            if (x < 0) {
                return false;
            }
            std::string s = std::to_string(x);
            if (s[s.length()-1] == '0' and s != "0") {
                return false;
            }
            else{
                std::string tmp = s;
                std::reverse(s.begin(), s.end());
                if (s == tmp) {
                    return true;
                }
                else{
                    return false;
                }
        
            }
            
    
        }
    };
    

    说来很惭愧,我第一次提交,用时160ms,着实吓了我一跳。
    本来昨天8ms解决的问题,我今天才拿来用,结果...

    骚操作

    看了一下第一名做的代码,我发现了一个新天地:
    先看代码:

    static int x = [](){ios::sync_with_stdio(false); cin.tie(nullptr); return 0; }();
    class Solution {
    public:
        bool isPalindrome(int x) {
            int numSrc = x;
            long long numDst = 0;
            if (x < 0)
            {
                return false;
            }
    
            while (numSrc)
            {
                numDst = numDst * 10 + numSrc % 10;
                numSrc /= 10;
            }
    
            return (numDst == x);
        }
    };
    

    看了一下,他用的是昨天的第二种方法,模10取余的方法,来进行回文,这个还比较正常,最骚的是第一句话,我把它加上后,时间瞬间从160ms变成了120ms,于是我去查了一下:
    这里面用到了c++ 11的内容:
    1、lambda表达式
    2、auto自动推断
    3、C++与C的兼容性

    我们单来分析一下这句话:

    static int x = [](){ios::sync_with_stdio(false);cin.tie(nullptr);return 0;}
    

    这句话首先用了忽略返回值的lambda表达式(自动推断),然后,sync_with_stdio()实际上是说是否兼容scanf和printf,是将cin与scanf绑定在一起的函数,而cin.tie()则是用来绑定cin与cout的。
    我们取消了这两种,速度自然就提升了上来。

    反思

    1、string直接赋值是浅复制
    2、algrothm和string里面都有翻转,也都没有返回值
    3、auto可以用来类型推断。

    相关文章

      网友评论

        本文标题:Leetcode9. Palindrome Number

        本文链接:https://www.haomeiwen.com/subject/zuxbjqtx.html