9. Palindrome Number【回文数字】

描述

Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.

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

例子
在这里插入图片描述
思路

  • 方法1: 把数字变为字符串,然后比较–效率最低
  • 方法2(比较合适):负数直接返回false,对正数取从后向前读,取一个反过来的数,然后比较
  • 方法3(虽然O(logn),但是考虑到更多细节) 不用担心反过来的数字会超过int的范围:负数直接返回,对正数从后向前读,取一半,然后跟前面的一半比较

答案

  • python
class Solution:
    def isPalindrome(self, x: int) -> bool:
        '''
        方法1
        s = str(x)
        for i in range(int(len(s)/2)):
            if s[i]!=s[len(s)-1-i]:
                return False
        return True
        '''
        '''
        方法2
        if x<0:
            return False
        xx = x
        num=0
        while x:
        
            num = num*10 + x%10
            x = x//10
        
        return False if xx!=num else True
        '''
        #方法3
        if x<0 or (x!=0 and x%10==0): #小于0的和10的倍数且不为0
            return False
       
        num=0
        while x>num:
            num = num*10 + x%10
            x = x//10
    
        if x==num or x==num//10 :
            return True
        return False


  • c++
class Solution {
public:
    bool isPalindrome(int x) {
        /*
        方法1
        string s = to_string(x);
        int L = s.size();
        for (int i=0; i<=(L-1)/2; i++)
            if (s[i] != s[L-1-i])
                return false;
        return true;
        */
        /*
        方法2
        if (x<0) return false;
        int xx = x;//要修改x
        long num=0;//可能会超过int范围
        while (x)
        {
            num = num*10 + x%10;
            x = x/10;
        }
         return xx==num? true: false;
         */
        //方法3
        if (x<0 || (x!=0 && x%10==0)) return false;
        int num = 0;
        while (x>num)
        {
            num = num*10+x%10;
            x/=10;
        }
        
        return (x==num || x==num/10)? true:false;
    }
};
发布了78 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/puspos/article/details/102968371
今日推荐