c++ string 回文串_回文数/串不完全指南【使用C++】

先看题目: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 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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值