zoukankan      html  css  js  c++  java
  • LeetCode || Palindrome Number

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

    推断一个int值是否为回文数。

    本题有几点须要注意:

    (1)不能用额外存储空间,也就是说仅仅能用常数空间解决;诸如将int转换为string再去比較字符是不可行的;

    (2)推断回文数的方法有两个:从中间開始向两头推断、从两头向中间推断。后者更简单一些。每次取出低位和高位数字进行比較。取低位直接模10即可,那怎样取高位呢?取高位也用模的方法,仅仅只是我们要首先知道X有多少位。如1001有四位,那么我们取高位的1时就模1000。我们设这个高位模为div。首先得计算出div才干開始推断回文,计算div的方法就是用x去除以10、100、1000.。

    。。直到得0,即:

    div =10;

    while(x / div != 0)    div *= 10;

    然后最后div /= 10;即可了。

    我一開始就是这么做的,可是不知道大家有没有发现,假设x是几十亿的数,while循环结束时得到的会是大一个数量级的上百亿的数(所以最后还要除以10),这样div就溢出了,所以这么求div是不正确的;应该这么求:

    div =1;

    while( x / div >10)    div *= 10;

    这样就不会溢出了。除非 x 溢出(这是不可能的);

    (3)推断回文过程中能够取出收尾的数字,再比較,也能够直接比較,我用的直接比較;

    代码例如以下:


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

    注意假设 x = 100001。那么经过一轮循环,x就变为1了。小于div 了。由于中间的0被取模消去了,此时也不影响推断过程,由于 x /div 依旧等于0.


    參考链接:http://leetcode.com/2012/01/palindrome-number.html








  • 相关阅读:
    hdu1238 Substrings
    CCF试题:高速公路(Targin)
    hdu 1269 迷宫城堡(Targin算法)
    hdu 1253 胜利大逃亡
    NYOJ 55 懒省事的小明
    HDU 1024 Max Sum Plus Plus
    HDU 1087 Super Jumping! Jumping! Jumping!
    HDU 1257 最少拦截系统
    HDU 1069 Monkey and Banana
    HDU 1104 Remainder
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5366900.html
Copyright © 2011-2022 走看看