先看题目:LeetCode-9
回文,就是说正向读和反向读都是一样的。例如,12321是一个回文数,"daaad"是一个回文字符串。
如果给出的是一个字符串类型,我们可以使用[0]和.size()-1同时遍历两边的string,再加上一个循环控制,每次两边相等则一个++,另一个--;两边不相等就可以直接return false了。
如果给出的是一个int类型的数,当然我们也可以这么做,先把他放进数组或者vector里,然后在进行同样的操作即可。就像下面这样:
class Solution {
public:bool isPalindrome(int x) {
if(x<0){
return false;
}
vector<int> pali;
while(x>=10){
pali.insert(pali.begin(),x % 10);
x=x/10;
}
pali.insert(pali.begin(),x);
int p = 0;
int q = pali.size()-1;
while(p<=q){
if(pali.at(p) == pali.at(q)){
p++;
q--;
}else{return false;}
}
return true;
}
};
但是这样似乎并不是一个好的解决方法,因为我们本可以使用一个long long类型的变量把题目给出的数字倒序表示出来,再进行一个if就可以解决了。就像下面这样:
class Solution {
public: boolean isPalindrome(int x) {
int temp = x;
if(temp < 0)
return false;
long long reverse = 0;
while(temp > 0){
reverse = reverse * 10 + temp % 10;
temp /= 10;
}
return (x==reverse) ? true : false;
}
}
为啥要用long long类型的变量类型嘞?我们需要考虑这个数在反转之后可能出现越界的问题,因此是有必要使用这样的类型的,当然第一种解法把这个数都拆成一个个的数字存放进vector的情况便不需要考虑越界问题。
此外,还有一个有趣的事情就是,当你把数反转之后如果他越界了,自然就不是回文数啦!因此好像也有人依旧用一个int类型的变量去存反转数,让他异常的时候return false。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。