专栏首页程序猿杂货铺【LeetCode题解-009】Palindrome Number

【LeetCode题解-009】Palindrome Number

代码格式不佳的话请点击下方阅读原文查看

1题目

Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.

Example 1:

Input: 121Output: true

Example 2:

Input: -121Output: falseExplanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.

Example 3:

Input: 10Output: falseExplanation: Reads 01 from right to left. Therefore it is not a palindrome.

Follow up:

Coud you solve it without converting the integer to a string?

2翻译

判判断一个数是否为回文数,并且不可以使用额外存储空间

3解题思路

  • 对于回文数判断,我最开始想到的是搞一个int型变量temp,用temp来存储输入x的反转,接着将temp与x进行比较,最后通过比较结果来输出true或false。但是题中明确给出了不可以使用额外存储空间的条件,因此此方式不可行
  • 使用字符串,这个方式就很简单了,先把字符串反转,然后判断两者是否相等,相等即为回文数字
  • 查看了下官方答案,用了一种很巧妙的方式,通过以此去比较指定数字的最高位和最低位是否相等来确定是不是回文数字

4解法一

使用字符串来实现,代码比较简洁,也很好理解,源码如下:

/**
     * 直接使用字符串的方式
     * @param x
     * @return
     */
    public static boolean isPalindrome_2(int x) {
        String b = String.valueOf(x);
        StringBuilder before = new StringBuilder(b);
        String after = before.reverse().toString();
        return b.equals(after);
    }

5解法二

使用官网提供的解题思路,逐次去判断给定数字的最高位和最低位是否相等来决定是否为回文数字

public static boolean isPalindrome(int x) {
        int length = 1;
        // 负数 越界肯定不是回文
        if (x < 0 || x > Integer.MAX_VALUE) {
            return false;
        }
        while(x / length >= 10) {
            length *= 10;
        }
        while (x != 0) {
            // x 的最高位
            int left = x / length;
            // x 的最低位
            int right = x % 10;
            // 有不相等的
            if (left != right) {
                return false;
            }
            // 去掉已经比较过得最高位和最低位 如 12345 变成 234
            x = (x % length) / 10;
            // 去除最高位和最低位之后 x 的长度也相应要减少
            length /= 100;
        }
        return true;
    }

本文分享自微信公众号 - 程序猿杂货铺(zhoudl_l),作者:zhoudl

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【算法】几道常见的算法字符串算法题

    谈到字符串问题,不得不提的就是 KMP 算法,它是用来解决字符串查找的问题,可以在一个字符串(S)中查找一个子串(W)出现的位置。KMP 算法把字符匹配的时间复...

    周三不加班
  • 【LeetCode题解-005】Longest Palindrome Substring

    Given a string s, find the longest palindromic substring in s. You may assume th...

    周三不加班
  • mysql基本知识点梳理和查询优化

    本文主要是总结了工作中一些常用的操作,以及不合理的操作,在对慢查询进行优化时收集的一些有用的资料和信息,本文适合有mysql基础的开发人员

    周三不加班
  • OverNet | 速度快&高性能&任意尺度超分

    DCNN在超分领域取得了前所未有的成功,然而基于CNN的超分方法往往存在计算量过大的问题,同时大多模型仅能处理特定超分比例,进而导致泛化性能缺失,提升了内存占...

    AIWalker
  • 【leetcode刷题】T84-回文子串

    具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。

    木又AI帮
  • 第7章 集合类第7章 集合类

    在 Java 类库中有一套相当完整的容器集合类来持有对象。Kotlin没有去重复造轮子(Scala则是自己实现了一套集合类框架),而是在Java 类库的基础上进...

    一个会写诗的程序员
  • C/C++中动态链接库的创建和调用

    DLL 有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL 副本的内容。DLL 是一个包含可由多个程序同时使用的代码和数据的库。下面为你介绍C/C++...

    古时的风筝
  • Spring5参考指南: SpEL

    SpEL的全称叫做Spring Expression Language。通常是为了在XML或者注解里面方便求值用的,通过编写#{ <expression str...

    程序那些事
  • 放大镜效果

    对画面的某个位置进行放大和缩小,是某些类型游戏里面必不可少的功能,比如常见的地图缩放,局部细节放大等等。它核心是对相机应用,异名基于此实现一个放大镜的demo

    张晓衡
  • HDU 1317 XYZZY(spfa跑正环)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1317

    Ch_Zaqdt

扫码关注云+社区

领取腾讯云代金券