题解 | #回文数字#
回文数字
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; } };
牛客刷题记录 文章被收录于专栏
记录自己的刷题记录,刷过的题的解法