算法学习打卡计划

leetcode:第9题

2022-10-06  本文已影响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转码进行比较。此方法比较……嗯……不是很优化,除非很闲,或者追求多解的趣味性,不然还是算了吧。

上一篇下一篇

猜你喜欢

热点阅读