LeetCode Day8 Palindrome_Number

法一:

反转整数比较

class Solution {
public:
    bool isPalindrome(int x) {
        int tmp=x,sum=0;
        if(x<0) return false;
        while(x!=0){
            sum=sum*10+x%10;
            x/=10;
        }
        return sum==tmp;
    }
};

法二:

只反转一半,偶数位数的直接与剩下的前半段比较,奇数位数的反转结果除以10以后与前半段比较

class Solution {
public:
    bool isPalindrome(int x) {
        int sum=0;
        if(x<0 || (x%10==0&&x!=0)) return false;
        while(x>sum){
            sum=sum*10+x%10;
            x/=10;
        }
        return sum==x || sum/10 ==x;
    }
};

法三:

从两边向中间进行对比,最左边的数要除以与当前量级相同的数取得,先计算位数;右边的数模10取得

class Solution {
public:
	bool isPalindrome(int x) {
		if (x < 0)
			return false;
		if (x < 10)
			return true;
		int figure = 1;
		for (int t = x; t / 10 != 0; t /= 10, figure++);	//计算位数
		int t = x;
		for (int half = figure / 2; half > 0; half--)
		{
			if (t / (int)pow(10, figure - 1) != t % 10)	//两头比较
				return false;
			t %= (int)pow(10, figure - 1);	//去掉最左边的数
			t /= 10;		//去掉最右边的数
			figure -= 2;	//	位数减2
		}

		return true;
	}
};

法四:

转为字符串检验是否为回文字符串

class Solution {
public:
	bool isPalindrome(int x) {
		string num = std::to_string(x);
		int i = 0;
		int j = num.length() - 1;
		while (num[i] == num[j]){
            if(i==j || i+1==j) return true;
            i++;j--;
        };
		return false;
	}
};
class Solution {
public:
    bool isPalindrome(int x) {
        int n,i=0,j=0;
        int a[10]={0};
        int y=x;
        if(y<0)
            return 0;
        while(y>9)
        {
           a[i++]=y%10;
            y = y/10;
        }
        a[i] = y;
        while(j<i)
        {
            if(a[j]!=a[i])
                return 0;
            else
            {
                j++;
                i--;
            }
        }
        return 1;
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_41394379/article/details/82961521