力扣刷题:9. 回文数

题目要求

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

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

在这里插入图片描述

在这里插入图片描述
原题链接

版本一:转换成字符串处理

class Solution {
    
    
public:
    bool isPalindrome(int x) {
    
    
            string s = std::to_string(x);
        if (s == string(s.crbegin(), s.crend()))
        {
    
    
            return true;
        }
        return false;
    }
};

整体思路

很简单。将传入的int整数转换成string类型,然后再判断string和自身的倒置是否相等。

版本二:非字符串版本

class Solution {
    
    
public:
    bool isPalindrome(int x) {
    
    
         int temp = x, invertInt = 0;
        if (x < 0)
        {
    
    
            return false;
        }
        while (x != 0)
        {
    
    
            if(invertInt >= static_cast<int>(pow(2,31)/10) - x % 10)
                return false;
            invertInt = invertInt * 10 + x % 10;
            x = x / 10;
        }
        if (temp == invertInt)
        {
    
    
            return true;
        }
        return false;
    }
};

整体思路

传入一个整数,每次将该整数的最后一位提取出来,然后传入到invertInt的最后一位。传入完毕后对比前后两个数,如果相等,则是回文字数。(类似于栈的pop和push)

需要注意的是,在将整数的最后一位传给invertint的的最后一位时,有可能会出现超出int类型的限制(int表示的范围参考第8题)。所以需要加一个if判断来判断是否超界。

学到了什么

1、再次强化了int能够表达的数的范围的印象:[-pow(2,31), pow(2,31)-1]
2、超出int类型的限制这个运行时异常在VS里不会报错?

猜你喜欢

转载自blog.csdn.net/youyadefeng1/article/details/113405867