【题目】
Determine whether an integer is a palindrome. Do this without extra space.
【题意】
题意判断一个整数是否是回文数
注意一下几点:
1. 不能用额外的空间
2. 负数不是回文数
【思路1】
依次比较首位值,需要注意处理类似1002001这样的数,当比较完首位值之后余下的数变成200, 2之前的两个0会自动清除。
【代码】
class Solution { public: int _size(int x){ int size = 0; int tx = x; while(tx){ tx /= 10; size++; } return size; } bool isPalindrome(int x) { if(x<0)return false; else if(x>=0 && x<=9)return true; else{ int size = _size(x); int head = x/(int)pow(10,size-1); int tail = x%10; if(head != tail){ return false; } x = x%(int)pow(10,size-1); x = x/10; int newsize = _size(x); if(size-newsize > 2) if(x%(int)pow(10, size-newsize-2) == 0) //考虑数后跟着一串0的情况 x = x/(int)pow(10, size-newsize-2); else return false; return isPalindrome(x); } } };
【思路2】
先生成原数的reverse Number, 然后跟原数比较
【代码】
class Solution { public: bool isPalindrome(int x) { long long reverseX=0; if(x<0)return false; int xcopy=x; while(xcopy){ //将整数倒置 reverseX=reverseX*10+xcopy%10; xcopy/=10; } if(reverseX>INT_MAX)return false; //判断倒置后的结果是否越界 if(x==(int)reverseX)return true; //判断倒置结果和原数是否相等 return false; } };
LeetCode 009 Palindrome Number,布布扣,bubuko.com
时间: 2024-08-27 02:08:16