[LeetCode 题解]:Palindrome Number

前言

 

【LeetCode 题解】系列传送门:  http://www.cnblogs.com/double-win/category/573499.html

 

1.题目描述

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

Some hints:

Could negative integers be palindromes? (ie, -1)

If you are thinking of converting the integer to string, note the restriction of using extra space.

You could also try reversing an integer. However, if you have solved the problem "Reverse Integer", you know that the reversed integer might overflow. How would you handle such case?

There is a more generic way of solving this problem.

2. 题意

判断一个整数是否是回文数。要求使用常量空间。

提示:

(1)负数是否是回文数?

(2)注意常量空间复杂度。将数字转换成字符串是不可行的。

3. 思路

如果将整个数字转换再判断是否是回文数,那么就可能出现反转之后的数字越界。

延续这个思路,能否通过某些技巧来避免越界呢?先看下面的例子:

(1) 1234321 / 12344321

将数字分成等长的两部分: 1234 和 4321。那么可以看出 4321 反转之后的数字为1234. 两者相等,所以1234321为回文数。

(2) 12345321

将数字分成等长的两部分: 1234 和 5321。那么可以看出 5321 反转之后的数字为1235.

由于1234!=1235,所以12345321不是回文数。

从上面两个例子可以看出。在处理一个数字是否是回文数的过程中,没有必要将整个数字反转。而只需要判断数字的前后等长的两部分时候相等即可。

那么如何在常量空间复杂度内,将数字分成前后两部分呢?

记 需要判断的数字为x,其前一部分为firstpart=x,后一部分为secondpart=0.

采取依次取firstpart的末位,将其添加到secondpart的尾部的方式,直到firstpart<=secondpart.

firstpart secondpart
1234321 0
123432 1
12343 12
1234 123
123 1234

当firstpart<secondpart时,只需反过来将secondpart最后一位转移到firstpart末位即可。

tmp=1234%10=4;

firstpart=firstpart*10+tmp=123*10+4=1234。

此时secondpart也为1234.

因此1234321为回文数。

4: 解法

class Solution {
public:
    bool isPalindrome(int x) {
        int first=x,second=0,tmp;
        if(x==0) return true;   //zero
        if(x<0|| x%10==0) return false; //negative number or the number is dividable by 10

        while(first>second){    // reverse the number
            tmp=first%10;
            second= second*10+tmp;
            first/=10;
        }
        if(first==second) return true;
        else{     // handle the number with odd digits
            tmp = second%10;
            first=first*10+tmp;
            if(first==second) return true;
            else return false;
        }
        return false;
    }
};


作者:Double_Win

出处: http://www.cnblogs.com/double-win/p/4002099.html

声明: 由于本人水平有限,文章在表述和代码方面如有不妥之处,欢迎批评指正~

时间: 2024-11-07 14:15:47

[LeetCode 题解]:Palindrome Number的相关文章

leetcode题解||Palindrome Number问题

problem: Determine whether an integer is a palindrome. Do this without extra space. click to show spoilers. Some hints: Could negative integers be palindromes? (ie, -1) If you are thinking of converting the integer to string, note the restriction of

LeetCode:Palindrome Number - 回文数

1.题目名称 Palindrome Number(回文数) 2.题目地址 https://leetcode.com/problems/palindrome-number 3.题目内容 英文:Determine whether an integer is a palindrome. Do this without extra space. 中文:确认一个整数是否是回文数 4.解题方法1 将数字翻转后判断与原数字是否相等,可以参考LeetCode第7题(Reverse Integer)的解题思路.J

Leetcode 数 Palindrome Number

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie Palindrome Number Total Accepted: 12165 Total Submissions: 41736 Determine whether an integer is a palindrome. Do this without extra space. click to show spoilers. Some hints: Could negative integ

LeetCode 009 Palindrome Number

[题目] Determine whether an integer is a palindrome. Do this without extra space. [题意] 题意判断一个整数是否是回文数 注意一下几点: 1. 不能用额外的空间 2. 负数不是回文数 [思路1] 依次比较首位值,需要注意处理类似1002001这样的数,当比较完首位值之后余下的数变成200, 2之前的两个0会自动清除. [代码] class Solution { public: int _size(int x){ int

【LeetCode】Palindrome Number

Palindrome Number Determine whether an integer is a palindrome. Do this without extra space. click to show spoilers. Some hints: Could negative integers be palindromes? (ie, -1) If you are thinking of converting the integer to string, note the restri

[LeetCode] 009. Palindrome Number (Easy) (C++/Java/Python)

索引:[LeetCode] Leetcode 题解索引 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 009.Palindrome_Number (Easy) 链接: 题目:https://oj.leetcode.com/problems/palindrome-number/ 代码(github):https://github.com/illuz/leetcode 题意: 判断一个数是否是回文数. 分析: 按自己想

leetcode 9 Palindrome Number 回文数

Determine whether an integer is a palindrome. Do this without extra space. click to show spoilers. Some hints: Could negative integers be palindromes? (ie, -1) If you are thinking of converting the integer to string, note the restriction of using ext

LeetCode 9 Palindrome Number (回文数)

翻译 确定一个整数是否是回文数.不能使用额外的空间. 一些提示: 负数能不能是回文数呢?(比如,-1) 如果你想将整数转换成字符串,但要注意限制使用额外的空间. 你也可以考虑翻转一个整数. 然而,如果你已经解决了问题"翻转整数(译者注:LeetCode 第七题), 那么你应该知道翻转的整数可能会造成溢出. 你将如何处理这种情况? 这是一个解决该问题更通用的方法. 原文 Determine whether an integer is a palindrome. Do this without ex

Leetcode 9. Palindrome Number(判断回文数字)

Determine whether an integer is a palindrome. Do this without extra space.(不要使用额外的空间) Some hints: Could negative integers be palindromes? (ie, -1) If you are thinking of converting the integer to string, note the restriction of using extra space. You

LeetCode 9 Palindrome Number(回文数字判断)

Long Time No See ! 题目链接https://leetcode.com/problems/palindrome-number/?tab=Description 首先确定该数字的位数.按照已知数字x对10进行多次求余运算,可以得到数字位数. 具体思路: 1.每次取出该数字的最高位和最低位进行比较. 2.如果不相等则直接返回FALSE, 3.如果相等修改x的值(去掉最高位也同时去掉最低位)其中去掉最高位可以通过求模运算,去掉最低位可以采用除以10 4.进行循环直到x的值不大于0为止