9. Palindrome Number,判断回文数字

Last Updated: 2023-09-30 07:42:40 Saturday

-- TOC --

终于熬到了第2道easy的题目。

题目分析

Given an integer x, return true if x is a palindrome , and false otherwise.

输入一个int,判断此int是否为回文,返回true or false。

Example 1:
Input: x = 121
Output: true
Explanation: 121 reads as 121 from left to right and from right to left.

Example 2:
Input: x = -121
Output: false
Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.

Example 3:
Input: x = 10
Output: false
Explanation: Reads 01 from right to left. Therefore it is not a palindrome.

Constraints:

简单分析一下,负数可以直接返回false,只需要对正数进行进一步的分析。根据LeetCode第5题,最长回文子串的经验,palindrome的长度可以是奇数,也可以是偶数。

转字符串比较

int类型不太好处理,转str后再判断。

Python

class Solution:
    def isPalindrome(self, x: int) -> bool:
        if x < 0:
            return False
        x_str = str(x)
        for i in range(len(x_str)//2):
            if x_str[i] != x_str[-i-1]:
                return False
        return True

C++

class Solution {
public:
    bool isPalindrome(int x) noexcept{
        if(x < 0)
            return false;
        string xstr {to_string(x)};
        size_t j {xstr.size()-1};
        for(size_t i{}; i<xstr.size()/2; ++i)
            if(xstr[i] != xstr[j-i])
                return false;
        return true;
    }
};

C

bool isPalindrome(int x){
    if(x < 0)
        return false;
    char xstr[11] = {};
    sprintf(xstr, "%d", x);
    size_t j = strlen(xstr) - 1;
    for(size_t i=0; i<strlen(xstr)/2; ++i)
        if(xstr[i] != xstr[j-i])
            return false;
    return true;
}

反转int

一个palindrome的int反转后,必须与它自己相等。

bool isPalindrome(int x){
    if(x < 0)
        return 0;
    long r = 0, n = x;
    while(n != 0){
        r = r*10 + n%10;            
        n /= 10;
    }
    return x==r ? 1 : 0;
}

返回类型为bool的函数接口,也可以返回0或1。看汇编就发现,此时任何非0的数字,都是被编译成1返回。

只反转一半int

这是更激进的做法:

bool isPalindrome(int x){
    if(x < 0)
        return 0;
    if((x%10==0) && (x!=0))
        return 0;
    int y = 0;
    while(x > y){
        y = y*10 + x%10;
        x /= 10;
    }
    return y==x ? 1 : y/10==x ? 1 : 0;
}

当非0正数的个位数为0的时候,可以直接返回。

本文链接:https://cs.pynote.net/ag/leetcode/202212171/

-- EOF --

-- MORE --