LeetCode 09 Palindrome Number

题目要求

  Determine whether an integer is a palindrome. Do this without extra space.
  题目翻译:判断一个Integer是否是回文数字。程序不开辟额外的空间。

题目分析

  最开始的思路是把比较数字的第一位和最后一位,并截断第一位和最后一位。比如:数字是12321,比较首尾,然后截断,得到232,依次比较。然而出现了一个问题:当输入带有0时,比如1000021时,截断会发生遗漏,比如截断1000021首尾,我们期望得到00002,结果得到的是2,因此出现错误的结果。
  调整的思路是取出首尾位,不截断。假设输入123321,比较2的时候,高位的2是这样得来的:(123321/10000)%10 ;低位的2是这样得来的:(123321%100)/10
泛化的情况如下:
  len = 数字位数-1; // 比如12321,len=4
  first = (x / (int)Math.pow(10, i)) % 10;
  last = (x % (int)Math.pow(10, len+1-i)) / ((int)Math.pow(10, len-i));

实现代码

package com.linsiyue;

public class Solution {
    public boolean isPalindrome(int x) {
        if (x<0) return false;
        if (x<10) return true;
        long n = 1;
        int first = -1, last = -1, len = 0;
        while (x >= n){
            n = n*10;
            len++;
        }
        len--;
        for (int i = len; i > len/2; i--) {
            first = (x / (int)Math.pow(10, i)) % 10;
            last = (x % (int)Math.pow(10, len+1-i)) / ((int)Math.pow(10, len-i));
            if (first != last) return false;
        }
        return true;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,767评论 0 33
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    叶总韩阅读 5,161评论 0 41
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,894评论 0 2
  • 王宝强离婚了。 原因是妻子和经纪人劈腿。 “无法容忍恶意背叛婚姻、破坏家庭”。 很多女孩都说过这样一句话:等玩儿累...
    背着女儿去旅行阅读 368评论 2 0