LeetCode9 回文数 解法与分析

瘦欲@ 提交于 2019-11-29 21:51:05

问题描述:

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

示例 1:

输入: 121
输出: true
示例 2:

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

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

进阶:

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

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

解法一:

将给出的数字进行判断,如果是负数立刻返回false,然后转成字符串进行判断。

代码如下:

class Solution {
public:
    bool isPalindrome(int x) {
        if(x < 0) return false;
        string s = to_string(x);
        int n = s.length()-1;
        for(int i = 0 ; i < s.length(); i++){
            if(i==n){
                return true;
            }
            if(s[i] != s[n]){
                return false;
            }
            n--;
        }
        return true;
    }
};

这个方法效率不高。

解法二:

是用数学方法解决,代码如下:

class Solution {
public:
    bool isPalindrome(int x) {
        if(x < 0) return false;
        if(x == 0) return true;
        int temp = x;
        int n = 0;
        while(temp > 0){
            temp /= 10;
            n++;
        }
        if(n == 1) return true;
        temp = 0;
        for(int i = 0; i< n/2 ;i++){
            temp = temp*10 + x % 10;
            x /= 10;
        }
        if(n%2 == 0){
            if(x == temp) return true;
        }
        else{
            x = x / 10;
            if(x == temp) return true;
        }
        return false;
    }
};
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!