【简单】9-回文数 Palindrome Number

题目

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

Follow up:

Coud you solve it without converting the integer to a string?

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

进阶:

你能不将整数转为字符串来解决这个问题吗?

Example1

输入: 121
输出: true

Example2

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

Example3

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

来源:力扣(LeetCode)
链接:https://leetcode.com/problems/palindrome-number

解法

方法一:字符串

思路

进阶处已经说了,可以转化成字符串解决问题。从两端开始比较,出现不一样的字符就判断为不是回文数字,直到中间即可

代码

class Solution {
public:
    bool isPalindrome(int x) {
        string s = to_string(x);
        int len = s.length();
        if(len < 2){
            return true;
        }
        int left = 0, right = len-1;
        while(left<right){
            if(s[left] != s[right])
                return false;
            else{
                left++;
                right--;
            }
        }
        return true;
    }
};

方法二:转化为反向的数字

思路

可以将数字翻转过来,判断反转前后是否相等,但是要注意数字翻转过来时可能会溢出,反转数字方法简单,给出图

代码

以下代码为leetcode给出的标准方法

long recursive(int a, long rest){
        if (a == 0) return rest;
        rest *= 10;
        return recursive(a/10, rest + a%10);
}

class Solution {
public:
    bool isPalindrome(int x) {
        if (x < 0) return false;
        long a = recursive(x, 0);
        if (a - x == 0) return true;
        else return false;
        
    }
};

总结

  1. 数字反向问题可以用递归的方法处理
posted @ 2020-04-17 15:15  陌良  阅读(120)  评论(0编辑  收藏  举报