LeetCode OJ9 Palindrome Number 小结

Palindrome Number

题目描述

Determine whether an integer is a palindrome. Do this without extra space

解题思路

我们的基本思路就是, 把这个数字提取出每个位上的数字,分别压入数组中去, 然后从两端向中间看去, 判断是否是回文数字

my code

class Solution {
public:
    bool isPalindrome(int x) {
        if (x < 0)
            return false;

        if (x == 0)
            return true;

        bool isPalid = true;
        vector<int> strx;
        while (x)
        {
            strx.push_back(x % 10);
            x = x / 10;
        }

        int len = strx.size();
        for (int i = 0; i != len / 2 + 1; i++)
        {
            if (strx[i] != strx[len - 1 - i])
            {
                isPalid = false;
                break;
            }
        }

        return isPalid;
    }
};

大神们的代码

demo 1

demo 1 主要是将数字遍历的同时, 构造反转数字, 当两个数字相近时候, 判断他们是否相等, 或是仅差一位, 思路非常 nice !!!
所有操作在一次遍历中实现了!!!

class Solution {
public:
    bool isPalindrome(int x) {
        if(x<0|| (x!=0 &&x%10==0)) return false;
        int sum=0;
        while(x>sum)
        {
            sum = sum*10+x%10;
            x = x/10;
        }
        return (x==sum)||(x==sum/10);
    }
};

demo2

demo2 直接将输入的 数据 进行反转, 判断反转之后的数据和原始数据之间是否相等, 从而实现, 但是这种方法, 最好需要判断时候溢出的问题

public boolean isPalindrome(int x) {

    if (x < 0) return false;

    int p = x; 
    int q = 0; 

    while (p >= 10){
        q *=10; 
        q += p%10; 
        p /=10; 
    }

    return q == x / 10 && p == x % 10;
}

demo 3

demo 3 采用一种方法, 直接提取某一位上的数据 (x%d)/(d/10)
一次向内进行比较, 从而实现判断

class Solution {
public:
    bool isPalindrome(long long x) {
        if (x < 0) return false;
        long long d = 10, e = 10;
        while (x / d) d *= 10;
        while (d > e)
        {
            if ((x % d) / (d / 10) != (x % e) / (e / 10))
                return false;
            d /= 10;
            e *= 10;
        }
        return true;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值