zoukankan      html  css  js  c++  java
  • leetcode------Palindrome Number

    标题: Palindrome Number
    通过率: 29.1%
    难度: 简单

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

      这个题没有理解是因为单词不认识,然后就是不知道什么是回文数,翻译一下,百度一下才知道什么是回文数,如果没有题目上最后一句话,那么还是好做的,把给定的数字换成字符串,然后从第零个位置比较最后一个位置,一共比较length/2次。

      题目上说不能用额外的空间那意思就是不能转换成字符串了。哪总体思路还是前后比较,首先要计算出数字的长度,用除10操作,获得length那么依然需要比较lenght/2次,这个题得通过一个例子来说明:

    假如一个回文数为:1234321,长度为7,那么length/2为3,即比较第 <0,6>;<1,5>;<2,4>三个数字若相同则为回文数。

    如果回文数为123321,length/2仍然为3,即比较<0,5>;<1,4>;<2,3>三组数字分别相同则为回文。

      那么要解决一个问题就是不用额外数组如何取数出来。要想到取余操作,我们以1234321这个数字为例子,

    要比较的位置为<0,6>;<1,5>;<2,4>,length为7,我们发现,<0,6>就是<0,length-1-0>,<1,5>就是<1,length-1-1>

    也就是<i,length-1-i>,那么对于1234321中第一次要比较的是第零个位置的1和第五个位置的1,对于第零个位置的1,1234321%1(10^6)获得,第六个位置的1,1234321%(10^0),说道这里就明白了。一个getnum函数就可以获得

    下面直接看代码:

     1 public class Solution {
     2     public boolean isPalindrome(int x) {
     3         int count=1,num=x;
     4         if(x<0) return false;
     5         while(num/10!=0){
     6             num/=10;
     7             count++;
     8         }
     9         for(int i=0;i<count/2;i++){
    10             int a=i;
    11             int b=count-1-i;
    12             if(getnum(x,a)!=getnum(x,b)){
    13                 return false;
    14             }
    15             
    16         }
    17         return true;
    18     }
    19     public int getnum(int x,int i){
    20         int tmp=(int)Math.pow(10,i);
    21         return (x/tmp)%10;
    22     }
    23 }
  • 相关阅读:
    PHP垃圾回收深入理解
    PHP的运行机制与原理(底层)
    SSO单点登录-简单实现
    HBuilder 打包流程
    PHP实现多继承的效果(tarits)
    mysql explain用法和结果的含义
    mysql分区功能详细介绍,以及实例
    MySQL分表、分区

    椒图
  • 原文地址:https://www.cnblogs.com/pkuYang/p/4234457.html
Copyright © 2011-2022 走看看