前文合集

每日一道 LeetCode 文章合集

题目:回文数

题目来源:https://leetcode-cn.com/problems/palindrome-number/

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例 1:

输入: 121
输出: true

示例 2:

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

进阶:

你能不将整数转为字符串来解决这个问题吗?

解题思路

在题目给出的示例中可以直观的看到,负数由于负号的关系,肯定不是回文数的,那么我们第一件事情就是判断输入的数字不是负数。

然后根据数字的特性,还可以知道个位数字是 0 的整数,肯定也不会是回文数,个位是 0 的数字如果是回文数的话,那么首位一定也要是 0 ,这种数字除了 0 以外其余的显然都不会是一个回文数。

这样,我们的第一个极限值判断就有了,所有的负数返回 false ,所有个位是 0 且不为 0 的整数也要返回 false

接下来,不知道你们会不会想到上一篇文章中的整数反转,将整个输入的数字反转后,得到的结果如果和输入数字一样,那么这个肯定是回文数,不过这么搞的话,我们还需要判断反转后的数字是否溢出,有点麻烦。

那么比较好的方案是啥,当然是直接反转后面一半的数字,与前面一半的数字做比较,如果一样的话,返回 true ,不一样的返回 false

数字反转的操作很简单,输入的数字 x 直接循环的取模就好,然后我们再对输入的数字在循环的过程中除以 10 。

问题是我们如何判断反转的位数已经达到了一半?

这个问题可以这么考虑,如果是偶数回文数的情况,X 和 Y 相等的时候,反转的位数就已经到一半了,如果是奇数回文数的情况,那么 X < Y 的时候,反转的位数也到一半了,然后我们对去除 Y 的最后一位,和 X 进行比较,如果相等,那么这个数字就是奇数位的回文数。

写代码

经过上面的分析,代码已经简单到显而易见了:

public boolean isPalindrome(int x) {
// 先做极限情况判断
if (x < 0 || (x % 10 == 0 && x != 0)) return false; int revertedNumber = 0; // 一直循环到 revertedNumber 大于或者等于 x
while (x > revertedNumber) {
revertedNumber = revertedNumber * 10 + x % 10;
x /= 10;
} return revertedNumber == x || x == revertedNumber / 10;
}

到这里,不知道有没有同学会想问,题目上如果没有加那句「不将整数转为字符串」题干,可以怎么解答。

在 Java 中,如果没有这个限制,那这个代码不要简单太多, Java 中的 StringBuilder 和 StringBuffer 都直接提供了 reverse() 方法:

public boolean isPalindrome_1(int x) {
// 先做极限情况判断
if (x < 0 || (x % 10 == 0 && x != 0)) return false; StringBuilder stringBuilder = new StringBuilder(String.valueOf(x));
return stringBuilder.toString().equals(stringBuilder.reverse().toString());
}

小结一下吧:如果以后遇到「整数反转」的问题,基本思路就是循环取模,然后再乘以 10 加起来,需要注意的就是 int 类型有长度限制,注意超限和极限值判断。今天的回文数可以看做一种稍微特殊的「整数反转」问题。

每日一道 LeetCode (3):回文数的更多相关文章

  1. leetcode 1.回文数-(easy)

    2019.7.11leetcode刷题 难度 easy 题目名称 回文数 题目摘要 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 思路 一些一定不为回文数的 ...

  2. LeetCode 5回文数

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...

  3. leetcode isPalindrome (回文数判断)

    回文很简单,就是正着读和反着读一样,要判断一个数是否为回文数只需要判断正反两个是不是相等即可. 再往深了想一下,只需要判断从中间分开的两个数一个正读,一个反读相等即可. 代码: class Solut ...

  4. Java实现 LeetCode 9 回文数

    9. 回文数 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false ...

  5. [LeetCode] 9. 回文数

    题目链接:https://leetcode-cn.com/problems/palindrome-number/ 题目描述: 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都 ...

  6. leetcode记录-回文数

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...

  7. Leetcode 9 回文数Palindrome Number

    判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向 ...

  8. [LeetCode]9.回文数(Java)

    原题地址: palindrome-number 题目描述: 给你一个整数 x ,如果 x 是一个回文整数,返回 true :否则,返回 false . 回文数是指正序(从左向右)和倒序(从右向左)读都 ...

  9. 每日一道 LeetCode (1):两数之和

    引言 前段时间看到一篇刷 LeetCode 的文章,感触很深,我本身自己上大学的时候,没怎么研究过算法这一方面,导致自己直到现在算法都不咋地. 一直有心想填补下自己的这个短板,实际上又一直给自己找理由 ...

  10. yzoi1109&&viojs1042最小步数的一点看法——回文数

    Description - 问题描述 有一天,雄霸传授本人风神腿法第一式:捕风捉影..............的步法(弟子一:堂主,你大喘气呀.风:你给我闭嘴.)捕风捉影的关键是换气(换不好就会大喘气 ...

随机推荐

  1. Java桌面应用程序打包

    IDEA环境生成Jar 设置配置 File -> Project Structure -> Artifacts -> + -> JAR -> From modules w ...

  2. elasticsearch集群配置 (Tobe Continue)

    elasticsearch集群配置 (Tobe Continue)   准备 首先需要在每个节点有可以正常启动的单节点elasticsearch   elasticsearch集群配置仅需要在elas ...

  3. zabbix fping 监控网络质量

    1,zabbix server (proxy)安装fping wget http://www.fping.org/dist/fping-3.16.tar.gz tar zxvf fping-3.16. ...

  4. Spark 两种方法计算分组取Top N

    Spark 分组取Top N运算 大数据处理中,对数据分组后,取TopN是非常常见的运算. 下面我们以一个例子来展示spark如何进行分组取Top的运算. 1.RDD方法分组取TopN from py ...

  5. java 中Object类中toString()的使用

    1. 当我们输出一个对象的引用时,实际上就是调用当前对象的toString() 2. Object类中toString()的定义: public String toString() { return ...

  6. KMP入门

    First.先上一份最原始的无任何优化的代码(暴力): #include <iostream> #include <cstring> using namespace std; ...

  7. 性能测试之jmeter逻辑控制种类详解一

    逻辑控制器介绍 Jmeter逻辑控制可以对元件的执行逻辑进行控制,除Once only Controller仅一次控制器以外,其他控制器都可以可以嵌套其他种类的控制器,下面是jmeter5.3支持的控 ...

  8. redux中的reducer为什么必须(最好)是纯函数

    为什么reducer最好是纯函数? 首先你得看看文档怎么说reducer的作用的,‘接收旧的 state 和 action,返回新的 state’,他起的是一个对数据做简单处理后返回state的作用. ...

  9. jpa随手笔记

    jpa注解1.设置Pojo为实体@Entity //标识这个pojo是一个jpa实体 2.设置表名@Table(name = "users") //指定表名为users 3.设置主 ...

  10. 集训作业 洛谷P1010 幂次方

    这个…… 这个题看上去有点难的样子. 仔细看看,感觉有点简单.啊,是递归啊,正经的看一看,好像是把一个数分成2的几次方的和. 然后余数和比他小的最大的2的次方数如果不是2的一次方或者2的0次方,就继续 ...