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