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








  • 相关阅读:
    线段树lazy标记??Hdu4902
    3D游戏引擎〇 開始
    实时分析之客户画像项目实践
    ubuntu14.04系统中virtualbox安装Oracle VM VirtualBox Extension Pack包
    《Android源代码设计模式解析与实战》读书笔记(二十二)
    最长递增子序列的数量
    springmvc学习笔记(19)-RESTful支持
    hadoop(三):hdfs 机架感知
    hadoop(二):hdfs HA原理及安装
    hadoop(一):深度剖析hdfs原理
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5366900.html
Copyright © 2011-2022 走看看