LeetCode第9题:Palindrome Number

来源:互联网 发布:r软件使用统计分析 编辑:程序博客网 时间:2024/05/17 01:35

问题描述:判断一个数是不是回文数。

回文数:就是从左往右念和从右往左念都是一样的,对称的一个数,如121,789987等。

注意:负数不是回文数,如-121。

解题思路一:如果一个数倒序输出后还等于原始的值,那么该数为回文数。

#include <iostream>using namespace std;class Solution {public:bool isPalindrome(int x){int xFirst=x;int reverseX=0;  int temp;   if (x<0)//如果输入的是负数,肯定不是回文数{  return false; }  while(x>0)//当x>0,判断整数倒序的数字是否=原先的数字,如果是,肯定是回文数,如果不是,肯定不是{  temp=x%10;  reverseX=reverseX*10+temp;  x=x/10;  } if (xFirst==reverseX){return true;}else{return false;}}};int main(){Solution s;bool isOrNot=s.isPalindrome(789987);cout<<isOrNot<<endl;return 0;}

解题思路2:如果一个数最左边的数等于最右边的数,然后再去除这两个数,然后再判断最左边的数依然等于最右边的数,直到最后一个数,那么该数为回文数。

#include <iostream>using namespace std;class Solution {public:bool isPalindrome(int x){if (x<0)//如果x小于0,不是回文数{return false;}int X_len=1;while (x/X_len>=10)//得到x是几位数{X_len*=10;}while(x>0){int numberLeft=x/X_len;//得到当前x最左边的数int numberRigth=x%10;//得到当前x最左右边的数if (numberRigth != numberLeft)//如果左右两个数字不相等{return false;}else//如果相等,继续执行{x=(x%X_len)/10;X_len=X_len/100;}}return true;}};int main(){Solution s;bool isOrNot=s.isPalindrome(7891987);cout<<isOrNot<<endl;return 0;}

在leetcode里面提交的结果是第一种方法貌似比第二种要快。

0 0
原创粉丝点击