一、 题目
试确定一个整数是否为回文数。并不使用额外的空间。
提示:
负整数可能是回文数吗?(例如 -1)
如果你想要将整数转换成字符串,那么你注意到不能使用额外的空间的限制。
可能你尝试翻转整数,但是,如果你已经解决这个问题“逆向整型”,你要知道,颠倒整数可能会溢出的情况。那么你会如何处理这样的情况呢?
要有解决这个问题的一种更通用的方法。
二、 分析
了解题目的意思后,其实问题本身很简单的,一想到回文数脑海中立刻想到翻转整数、双指针等方法,但是难度在它的提示,即不能使用额外的空间和溢出的情况。原本我看是整数,就想到使用itoa(),不过此时不能使用,使用翻转整数的方法虽然提示会溢出,不过这是最初想到的方法,leetcode也过了,如下:
1、每次将flag求余10,目标整数res = res * 10 + flag % 10;
2、flag /= 10,直到为0;
3、判断目标整数和原整数是否相等。
class Solution { public: bool isPalindrome(int x) { if(x < 0) return false; int flag = x; int res = 0; while(flag > 0){ res = res * 10 + flag % 10; flag /= 10; } if(x == res) return true; return false; } };
另外一种方法是首先求出x的阶数count,比较x头尾两个对应的数字是否相等即可,如下:
1、求出x的阶数count;
2、比较x/count 和 x%10 不相等返回false;
3、x %= count,x /= 10,count /= 100,直到x = 0;
class Solution { public: bool isPalindrome(int x) { if(x < 0) return false; int a = x; int count = 1; while(a >= 10){ count *= 10; a /= 10; } while(x > 0){ if(x/count != x%10) return false; x %= count; x /= 10; count /= 100; } return true; } };
原文地址:http://blog.csdn.net/zzucsliang/article/details/43564249