回文数

回文数

十一月 25, 2018

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。


示例1:

输入:121
输出:true

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

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

解答:
class Solution {
public:
bool isPalindrome(int x) {
//x为负数时,肯定不是回文数。x是10的整数倍时,也不是回文数。
if(x < 0 || (x % 10 == 0 && x != 0))
return false;

//通过x除以10取余,加上reverterNum*10来反转数字,并且让x等于自身除以10的商,这样相当于去掉了x的最后一位。
//获取到的新数字一定不能大于x,所以循环,当x<reverterNum时跳出循环。
int reverterNum = 0;
while(x > reverterNum)
{
reverterNum = reverterNum * 10 + x % 10;
x /= 10;
}

//这里有两种情况:
//第一种是传进函数的x是偶数位,那么只有当x==reverterNum时,传入的x才是回文数。
//另一种时传进函数的x是奇数位,那么要想跳出循环,reverterNum一定是比x要多一位的,所以reverterNum需要除以10取商。
return x == reverterNum || x == reverterNum / 10;
}
};

复杂度分析

  • 时间复杂度:,对于每次迭代,我们会将输入除以10,因此时间复杂度为
  • 空间复杂度: