leetcode:第9题

作者: 皮克斯不爱吃糖 | 来源:发表于2022-10-06 18:42 被阅读0次

    题目

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

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

    例1

    输入:x = 121
    输出:true
    

    例2

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

    例3

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

    提示

    -pow(2,31) <= x <= pow(2,31) - 1
    

    代码

    //转字符串计算
    if(x < 0)
        {
            return false;
        }
        else
        {
            string y = to_string(x);
            string m = y;
            long n = y.size();
            char *p1,*p2;
            p1 = &y[0];
            p2 = &y[n - 1];
            for(*p1 = y[0],*p2 = y[n - 1];p1 < p2;p1++,p2--)
            {
                if(*p1 != *p2)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            }
            return m == y;
        }
    //二分直接计算
    class Solution {
    public:
        bool isPalindrome(int x) {
            //string y;
    
     string s = to_string(x);
             int t = s.size(),l = t / 2, n = 0;
             for(int i = 0; i < l;i++)
              {
                 if(s[i] != s[t - i - 1])
                  {
                     n = 1;
                     break;
                 }
             }
             if(n) 
                {
                    return false;
                }
             return true;
    }
    

    思路

    这道题与第7题类似,但有不同,最明显的特征是,本题输入量若是转为字符串,若x为负数,前缀“-”号纳入了回文判断。
    方法一:与第7题类似,直接计算,本题无需输出转换后的值,因此不设置long型也可。在进行数学计算之前,优先判断x是否为负数,若是x为负数,直接返回false即可;x非负再进行下一步计算。
    方法二:同样先加入x的正负判断,再进行转换为字符串计算,可以使用string = to_string()函数进行整型与字符串的转换。后续可以使用二分法对比;也可以类似第3和第7题的方法,先进行字符串的反转,再进行两个字符串的对比。
    方法三:使用ASCII码置换对比。这个方法同样需要先将int x先转换成为string型,再对每个字符进行ASCII转码进行比较。此方法比较……嗯……不是很优化,除非很闲,或者追求多解的趣味性,不然还是算了吧。

    相关文章

      网友评论

        本文标题:leetcode:第9题

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