【每日算法】LeetCode 9 —— 回文数(一百零一)

题目内容

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

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

示例

示例 1:
输入:x = 121
输出:true

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

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

示例 4:
输入:x = -101
输出:false

提示

-2^31 <= x <= 2^31 - 1

题解

首先,这里直接对负数进行剪枝,如果x < 0,那么直接返回0即可。
然后在保证x为整数的情况下,进行如下两种思考:
Part1 进行两个字符串的比较

string s = to_string(x)
return s == string(s.rbegin(),s.rend())

Part2 数字翻转并比较
因为题目中没有对数据类型的限制,因此为了防止int类型溢出,采用long long 来存储翻转后的数字,然后进行x == res的比较即可。
我们需要将x中从个位开始抠出来,然后每次*10即可,具体看下方代码。

代码

class Solution {
public:
bool isPalindrome(int x) {
if(x < 0) return false;
long long res = 0;
int y = x;
while(x){
res = res * 10 + x % 10;//x % 10 会取出x的个位数
x /= 10;//x除完之后将x的个位数去掉
}

return y == res;
}
};
Author: Frederic Niu
Link: https://www.fredericniu.cn/2021/04/02/【每日算法】LeetCode-9-——-回文数(一百零一)/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
我的公众号