Leetcode #9 Easy <Palindrome Number>

题目如图,下面是我的解决方法:
class Solution {
public boolean isPalindrome(int x) {
if(x < 0) //由题意可知,小于0的数不可能为回数, 因此直接返回false
4 return false;
else {
String len = x + "";
int[] arr = new int[len.length()]; //创建数组arr, 长度为x的位数
int result = 0;
int q = x;
for(int i = 0; i < len.length(); i++) //数组从index 0 开始依次存放个位数,十位数,百位数... 然后X依次/10降位
{ arr[i] = x % 10;
x = x/10;
}
for(int i = len.length()-1, j = 0; i>-1; i--,j++) //将储存的数字从数组的 index max 开始依次取出,乘以10^(对应循环次数),即可实现反转
{
result += arr[i] * (int)Math.pow(10,j);
}
if(result == q) //比较反转结果和原来的数
return true;
else
return false;
}
}
}
在看了大神的解题思路,以及对比了大神的解题代码之后,我总结了自己思路以及代码上的缺陷:
1.解题思路太过于耿直,没有思考如何写出优雅的解题算法
2.没有考虑到反转整数可能存在的内存溢出情况
下面是官方解题的代码:
class Solution {
public boolean isPalindrome(int x) {
// 特殊情况:
// 如上所述,当 x < 0 时,x 不是回文数。
// 同样地,如果数字的最后一位是 0,为了使该数字为回文,
// 则其第一位数字也应该是 0
// 只有 0 满足这一属性
if(x < 0 || (x % 10 == 0 && x != 0)) {
return false;
}
int revertedNumber = 0;
while(x > revertedNumber) {
revertedNumber = revertedNumber * 10 + x % 10;
x /= 10;
}
// 当数字长度为奇数时,我们可以通过 revertedNumber/10 去除处于中位的数字。
// 例如,当输入为 12321 时,在 while 循环的末尾我们可以得到 x = 12,revertedNumber = 123,
// 由于处于中位的数字不影响回文(它总是与自己相等),所以我们可以简单地将其去除。
return x == revertedNumber || x == revertedNumber/10;
}
}
作者:LeetCode 链接:https://leetcode-cn.com/problems/palindrome-number/solution/hui-wen-shu-by-leetcode/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
官方解题的思路为:
既然可能存在溢出的情况,那我们就想办法只反转原数的一半来进行比较,这样就不可能出现溢出的情况了!
那么,怎么样知道循环到什么时候已经反转了一半了呢?
很简单,当x <= revertedNumber的时候,即为反转了一半。(注意:这个地方理应只考虑回数反转一半所需的条件!偶回数反转循环结束后只可能x = rN,奇回数反转循环结束后只可能x < rN,然后最终交由return里的条件判断是否为回数即可。形如4321这样的非回偶数,反转循环会出现 43>21的情况,最终得到 x=4,revertedNumber=123。无需纠结因为他不是回数)
Leetcode #9 Easy <Palindrome Number>的更多相关文章
- leetcode bug & 9. Palindrome Number
leetcode bug & 9. Palindrome Number bug shit bug "use strict"; /** * * @author xgqfrms ...
- 《LeetBook》leetcode题解(9):Palindrome Number[E]——回文数字
我现在在做一个叫<leetbook>的开源书项目,把解题思路都同步更新到github上了,需要的同学可以去看看 地址:https://github.com/hk029/leetcode 这 ...
- leetcode 第九题 Palindrome Number(java)
Palindrome Number time=434ms 负数不是回文数 public class Solution { public boolean isPalindrome(int x) { in ...
- leetcode题解 9. Palindrome Number
9. Palindrome Number 题目: Determine whether an integer is a palindrome. Do this without extra space. ...
- 【LeetCode】9. Palindrome Number (2 solutions)
Palindrome Number Determine whether an integer is a palindrome. Do this without extra space. click t ...
- [LeetCode 题解]:Palindrome Number
前言 [LeetCode 题解]系列传送门: http://www.cnblogs.com/double-win/category/573499.html 1.题目描述 Determine ...
- LeetCode(9) - Palindrome Number
题目要求判断一个整数是不是回文数,假设输入是1234321,就返回true,输入的是123421,就返回false.题目要求in-place,思路其实很简单,在LeetCode(7)里面我们刚好做了r ...
- 【一天一道LeetCode】#9. Palindrome Number
一天一道LeetCode系列 (一)题目 Determine whether an integer is a palindrome. Do this without extra space. Some ...
- 【算法】LeetCode算法题-Palindrome Number
这是悦乐书的第144次更新,第146篇原创 今天这道题和回文有关,即从前往后和从后往前是一样的,如"上海自来水来自海上"就是一个回文字符串,如整数121就是回文数,这些都是和回文相 ...
随机推荐
- Java-FileUploadUtil工具类
package com.gootrip.util; import java.io.File; import java.util.*; import org.apache.commons.fileupl ...
- vue大文件上传断点续传解决方案
之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
- 远程管理FTP
FTP默认路径 建立pub目录(注意不是文件) LeapFTP使用 注:上传到服务器的pub文件下,不要弄错目录. 在本地计算机利用LeapFTP与FTPServer进行数据的传输,但是FTPServ ...
- Spring——bean的五种作用域和生命周期
一.Bean的作用域 1.当一个bean的作用域为Singleton,那么Spring IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回 ...
- selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
抓取网页代码后,由于是在同一个li标签下,所以使用一次性抓取,所有的a标签,然后循环做不同的操作,但是抛出找不到元素异常. def office_page(_chrome: Chrome): sn = ...
- JavaWeb_ Servlet API(中文)
Java Servlet 中文API Java Servlet API由两个软件包组成:一个是对应HTTP的软件包,另一个是不对应HTTP的通用的软件包.这两个软件包的同时存在使得Java Se ...
- [CSP-S模拟测试]:那一天我们许下约定(DP+组合数学)
题目传送门(内部题2) 输入格式 每个测试点有多组测试数据.对于每组数据,有一行共三个整数$N$,$D$,$M$含义如题.输入结束标识为$“0 0 0”$ (不含引号). 输出格式 对于每组数据,输出 ...
- Vuex的基本原理与使用
我们需要知道 vue 是单向数据流的方式驱动的 什么是vuex? 为什么要使用vuex ? - 多个视图依赖于同一状态. - 来自不同视图的行为需要变更同一状态. vuex 类似Redux 的状态管理 ...
- python正则表达式-案例
工作中遇到一个小问题,需要在一个日志文件中,删选出包含emrfs sync命令和之后内容的行,格式如下, [2019-10-31 08:20:16,389] {logging_mixin.py:84} ...
- 高效C++无锁队列实现-moodycamel::ConcurrentQueue
国外一牛人做的,支持多平台,支持多线程写.多线程读,并可指定读写token,转载过来. 感觉作者也时刻维护着他这个项目,我提了一些问题,每次都会及时得到答复,而且回复得非常认真仔细,非常赞! 链接地址 ...