Leetcode之整数反转
- 问题描述
- 解法
- 出现的问题
- 结果
- 官方解法
- 优秀解法
问题描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
\(\color{#FF0000}{注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0.}\)
解法
class Solution {public int reverse(int x) {if(x==0)return 0;//模10while(x%10==0)x/=10;return get(x);}public int get(int a) {String str=a+"";StringBuilder sb=new StringBuilder();//负数if(str.charAt(0)=='-'){sb.append("-");for(int i=str.length()-1;i>0;i--) {sb.append(str.charAt(i));}}else {//正数for(int i=str.length()-1;i>=0;i--) {sb.append(str.charAt(i));}}try{Integer.parseInt(sb.toString());}catch(java.lang.NumberFormatException e) {//如果溢出return 0;}return Integer.parseInt(sb.toString());}
}
出现的问题
- 在模10的情况前没有考虑特殊情况0
- 刚开始时不知道怎么处理溢出,后来想到处理异常的方式处理溢出(当字符串转为int不合法时会抛出异常)
结果
官方解法
class Solution {public int reverse(int x) {int rev = 0;while (x != 0) {int pop = x % 10;x /= 10;if (rev > Integer.MAX_VALUE/10 || (rev == Integer.MAX_VALUE / 10 && pop > 7)) return 0;if (rev < Integer.MIN_VALUE/10 || (rev == Integer.MIN_VALUE / 10 && pop < -8)) return 0;rev = rev * 10 + pop;}return rev;}
}
优秀解法
public int reverse(int x) {int ans = 0;while (x != 0) {if ((ans * 10) / 10 != ans) {//使用这种方法来判断ans*10是否会溢出ans = 0;break;}ans = ans * 10 + x % 10;x = x / 10;}return ans;
}
有问题是ans*10可能没有溢出但是在ans = ans * 10 + x % 10如果溢出则结果是错的。这里可以通过的原因是2147483647和-2147483648可以看到当溢出时,最后一位一定是1或2不会达个位7、8这样的溢出条件。同理,官方解法中也不用判断7、-8的大小。
Leetcode之整数反转相关推荐
- [模拟|数位] leetcode 7 整数反转
[模拟|数位] leetcode 7 整数反转 1.题目 题目链接 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输 ...
- 【LeetCode】整数反转
package leetcode.editor.cn;//给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. // // 示例 1: // // 输入: 123 //输出: 32 ...
- 53 -leetcode 7. 整数反转
//看看人家 写的多简单 INT_MIN INT_MAX 2^31 -1 -2^31 7. 整数反转 class Solution {public:int reverse(int x) {int fh ...
- LeetCode NO7. 整数反转
给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果. 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0. 假设环境不允许存储 64 ...
- php 反转一个整数,LeetCode PHP 整数反转
友情提示:此篇文章大约需要阅读 2分钟16秒,不足之处请多指教,感谢你的阅读. 题目 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 32 ...
- LeetCode 7. 整数反转 Reverse Integer 官网答案的条件判定的一点思考
关于solution中的公式不知道是否清楚,在刚开始看的时候认为条件之一应当是rev<(Integer.min-pop)/10这个条件,因为rev*10+pop>Integer.min时才 ...
- C++ leetcode 7. 整数反转 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
一.思路 转化成string, 有负号先去掉负号,然后从string的尾部开始遍历,每一个字符放到第一个另一个字符串中去. int reverse(int x) {if (x == 0)return ...
- leetcode 7整数反转和leetcode 9回文数
关键代码片 while(x>reverseN){reverseN = reverseN * 10 + x%10;x = x/10;} while (x != 0) {int pop = x % ...
- LeetCode 7 整数反转
解决方案 class Solution {public int reverse(int x) {String str = String.valueOf(x);String s = "&quo ...
- LeetCode 07. 整数反转
原题描述 个人解法思路 class Solution { public:int reverse(int x) {int temp=0;//需要返回的最后结果while(x!=0){if(temp> ...
最新文章
- windows AD/DNS服务器搭建
- flutter打开android界面,在已有Android项目中使用Flutter
- 在IIS(64位)上部署WCF服务访问Oracle数据库
- android6.0源码分析之Activity启动过程
- import numpy as np_纪录27个NumPy操作
- java hanlp分词_Hanlp分词实例:Java实现TFIDF算法
- Android开发之引用三方库导致SO库冲突的解决办法
- php 采集不到内容_Thinkphp5与QueryList,也可以实现采集(爬虫)页面功能
- Disruptor内存消息队列的资料整理
- 春节7天新增病毒54万 钓鱼欺诈成最大威胁
- WINDOWS7都谢幕了,微软为何不出个补丁包?
- php绕过验证码注册,验证码被绕过的处理方法_PHP教程
- 线程安全问题和Synchronized的使用
- 我国大部地区遭罕见寒潮 23省区应急响应
- 科技云报道:“Sky Computing”会是云计算未来的新方向吗?
- 小红书行业黑话大全,小红书专业术语一手掌握
- Java经典面试题总结(附答案)-java经典面试题大全总结以及整理
- (6.1)MATLAB机器人正、逆解中姿态求解的欧拉角的说明
- Azure媒体服务的Apple FairPlay流功能正式上线
- 德国语言+留学签证递交材料详解(上海)
热门文章
- Centos干净卸载apache-php-mysql
- 重写( override)and 重载(overload)
- bbs小项目整理(六)(消息发布)
- oc快速生成单例头文件解析
- MM模块采购收货的错误解决方案(2)
- 手把手教你做关键词匹配项目(搜索引擎)---- 第十一天
- python中的成员运算符用于判断什么_Python3基础-表达式和运算符
- unity 2d文字跟随主角移动_太可了!这些领域可以把Unity玩的那么好,带你开启新世界...
- c语言输入数字 获取星期几,输入字母,判断星期几,求大神指点
- LeetCode4 寻找两个正序数组的中位数