码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode—Palindrome Number 数字是否是回文数字

时间:2015-04-08 16:37:01      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:leetcoode   回文数字   

Determine whether an integer is a palindrome. Do this without extra space.


检测当前数字是否是回文数字,同时不能增加额外的内存空间,这里一个注意的点就是 负数 都不可能是回文数字

然后是检测出来每一位数字进行比较

代码还是写得比较繁琐,主要的一个点就是数字的位数是基数位和偶数位的时候处理的过程是不同的

class Solution {
public:
int GetH(int x,int num)//获得对应位置的数字
{
	while(num)
	{
		x = x/10;
		num--;
	}
	return x%10;
}
bool isPalindrome(int x) {
    if(x < 0)
    {
        return false;
    }
	int Hnum = 0;
	int y = x;
	while(y)
	{
		Hnum++; //记录数字一共有多少位
		y = y/10;
	}
	if(Hnum&1)//<奇数位数
	{
		int num = Hnum/2;//<d
		int i = 1;
		while(i <= num)
		{
			int h = GetH(x,num-i);
			int l = GetH(x,num+i);
			if(h!= l)
			{
				return false;
			}
			i++;
		}
	}
	else
	{
		int num = Hnum/2;
		int i = 0;
		while(i < num)
		{
			int h = GetH(x,num+i);
			int l = GetH(x,num-1-i);
			if(h!= l)
			{
				return false;
			}
			i++;
		}
	}
	return true;
}
};


还是贴出一些网上比较好的解法:

这里用到一个base直接计算出来最高位的级别,100 、1000,100000......在做的时候直接利用除法

而且这里比较的时候是从两边向中间进行比较,那么这个时候数位的奇偶位置就不再显得重要,也就不需要写分支


所以: 如果是数位之间的比较,最好是利用头尾之间进行比较。

class Solution {
public:
    bool isPalindrome(int x) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if (x < 0)
            return false;
        if (x == 0)
            return true;
            
        int base = 1;
        while(x / base >= 10)
            base *= 10;
            
        while(x)
        {
            int leftDigit = x / base;
            int rightDigit = x % 10;
            if (leftDigit != rightDigit)
                return false;
            
            x -= base * leftDigit;
            base /= 100;
            x /= 10;
        }
        
        return true;
    }
};



LeetCode—Palindrome Number 数字是否是回文数字

标签:leetcoode   回文数字   

原文地址:http://blog.csdn.net/xietingcandice/article/details/44940825

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!