最近更新于 2022-06-05 00:33

题目

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

例如,121 是回文,而 123 不是。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/palindrome-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

1.负数不是回文数,直接排除。

2.零是回文数,直接确定。

3.在不是 0 的情况下,以 0 结尾的数不是回文数,如 1230 倒序后为 321,就是判断是否能被 10 整除。

4.在排除前面的情况后,就是将原数与倒序后的数比较,相等就是回文数。现在的关键点就在倒序上,可以将数字转为字符串,然后倒序;也可以直接基于数字处理进行倒序。

代码

  • 数字处理
bool isPalindrome(int x)
{
    if (x < 0)
    {
        return false;
    }
    else if (x == 0)
    {
        return true;
    }
    else if (x % 10 == 0)
    {
        return false;
    }

    unsigned int reverse = 0;
    int src = x;
    while (x)
    {
        reverse *= 10;
        reverse += (x % 10);
        x /= 10;
    }
    
    if (reverse == src)
    {
        return true;
    }
    return false;
}
  • 字符串处理
#include <stdio.h>
#include <string.h>

bool isPalindrome(int x)
{
    if (x < 0)
    {
        return false;
    }
    else if (x == 0)
    {
        return true;
    }
    else if (x % 10 == 0)
    {
        return false;
    }

    static char src[11], reverse[11];
    memset(src, '\0', sizeof(src));
    memset(reverse, '\0', sizeof(reverse));
    sprintf(src, "%d", x);
    
    for (int i = 9, j = 0; i >= 0; --i)
    {
        if (src[i] == '\0')
        {
            continue;
        }
        reverse[j] = src[i];
        ++j;
    }

    if (strcmp(src, reverse) == 0)
    {
        return true;
    }
    return false;
}

作者 IYATT-yx