难易度:易
题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
特别说明:LeetCode上此题认为-123 倒过来是123-不是回文数,我感觉因为不是字符串,有待商榷,那我们就不考虑负数的情况。
思路:
1:如果是正整数不考虑字符串的情况下,那我们应该会想到把正整数反转输出对比原数据,如果相等就是回文数,关于数字反转,请参考我的iOS算法系列(一)--数字反转。
2:如果我们在考虑优化的话,那我们只需要反转一半的数字即可,比如:456654,我们反转后三位得到456,剩下的三位为456。即可得到次数为回文数。
3:那如何判断正好反转了一半呢,就用反转的后的数字10和剩下未反转的数字进行大小比较,如果大于剩下的那就是反转一半了,比如1221,第一次反转得到的数字为1,那么110=10, 10<122,继续反转,12*10 = 120, 120 >12,那么代表已经转了一半。
3:那上面考虑的是偶数位的情况,如果是奇数位的话,也可以使用。
4:最后因为我们不知道到底是奇数位还是偶数位,我们需要用一个或状态来返回两种可能的情况
代码如下,已经下Xcode上编译运行,并输出正确结果
-(BOOL)isPalindrome:(NSInteger)paraInt
{
//小于10不是回文数
if (paraInt <= 10)
{
return NO;
}
//我们拿反转数求模剩余的数字进行比较,反转一半的数就可以,如果是奇数的话,我们只需要把他去除掉即可
NSInteger temp = 0;
while (temp * 10 < paraInt)
{
temp = paraInt % 10 + temp * 10;
paraInt /= 10;
}
return temp == paraInt || temp/10 == paraInt;
}
网友评论