设为首页 加入收藏

TOP

leetcode:Palindrome Number
2015-07-20 17:20:04 来源: 作者: 【 】 浏览:2
Tags:leetcode:Palindrome Number

一、 题目

试确定一个整数是否为回文数。并不使用额外的空间。

提示:

负整数可能是回文数吗?(例如 -1)

如果你想要将整数转换成字符串,那么你注意到不能使用额外的空间的限制。

可能你尝试翻转整数,但是,如果你已经解决这个问题“逆向整型”,你要知道,颠倒整数可能会溢出的情况。那么你会如何处理这样的情况呢?

要有解决这个问题的一种更通用的方法。

二、 分析

了解题目的意思后,其实问题本身很简单的,一想到回文数脑海中立刻想到翻转整数、双指针等方法,但是难度在它的提示,即不能使用额外的空间和溢出的情况。原本我看是整数,就想到使用itoa(),不过此时不能使用,使用翻转整数的方法虽然提示会溢出,不过这是最初想到的方法,leetcode也过了,如下:

1、每次将flag求余10,目标整数res = res * 10 + flag % 10;

2、flag /= 10,直到为0;

3、判断目标整数和原整数是否相等。

class Solution {
public:
    bool isPalindrome(int x) {
        if(x < 0) return false;
        int flag = x;
        int res = 0;
        while(flag > 0){
        	res = res * 10 + flag % 10;
        	flag /= 10;
        }
        if(x == res) return true;
        return false;
    }
};

另外一种方法是首先求出x的阶数count,比较x头尾两个对应的数字是否相等即可,如下:

1、求出x的阶数count;

2、比较x/count 和 x%10 不相等返回false;

3、x %= count,x /= 10,count /= 100,直到x = 0;

class Solution {
public:
    bool isPalindrome(int x) {
        if(x < 0) return false;
        int a = x;
        int count = 1;
        while(a >= 10){
        	count *= 10;
        	a /= 10;
        }
        while(x > 0){
        	if(x/count != x%10)
        		return false;
        	x %= count;
        	x /= 10;
        	count /= 100;
        }
        return true;
    }
};


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇hdu 1524 A Chess Game (SG) 下一篇ural 1018 Binary Apple Tree

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python 数据分析与可 (2025-12-26 21:51:20)
·从零开始学Python之 (2025-12-26 21:51:17)
·超长干货:Python实 (2025-12-26 21:51:14)
·为什么 Java 社区至 (2025-12-26 21:19:10)
·Java多线程阻塞队列 (2025-12-26 21:19:07)