题解 | #回文数字#
回文数字
http://www.nowcoder.com/practice/35b8166c135448c5a5ba2cff8d430c32
这道题一上来我想的是用一个数组存数字的各位数,然后用两个指针分别从数组两端遍历数组并比较,但是题目要求不能使用额外的内存空间,于是我考虑重复对数据进行操作,每次取最高位和最低位,然后比较,只要不相等就返回false.
取最低位比较简单,直接原数取余即可;主要是取最高位,采用while循环,循环进行的条件就是原数除10之后的商不是1位数,所以直到该商是一位数的时候就得到了最高位。
得到最低位和最高位之后,在原数的基础上减去两位,就相当于之前数组思想中的指针移位。
代码如下:
class Solution {
public:
/**
*
* @param x int整型
* @return bool布尔型
*/
bool isPalindrome(int x) {
// write code here
if(x<0)
{
return false;
}
int y1 = abs(x);
int y2 = abs(x);
int i = 0;
int zheng = 0;
int fan = 0;
while(y1>9)
{
i = 1;
while((y1/=10)>9)
{
i = i*10;
}
zheng = y1;//正着取最高位
fan = y2%10;//倒着取个位
//把比较过的两个数减去
y2=y2/10;//去掉个位
y1=y2-zheng*i;//去掉最高位
y2=y1;
if(zheng == fan)
{
continue;
}
else{
return false;
}
}
return true;
}
};牛客刷题记录 文章被收录于专栏
记录自己的刷题记录,刷过的题的解法