目录
  • 问题描述
  • 解法
  • 出现的问题
  • 结果
  • 官方解法
  • 优秀解法

问题描述

给出一个 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之整数反转相关推荐

  1. [模拟|数位] leetcode 7 整数反转

    [模拟|数位] leetcode 7 整数反转 1.题目 题目链接 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输 ...

  2. 【LeetCode】整数反转

    package leetcode.editor.cn;//给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. // // 示例 1: // // 输入: 123 //输出: 32 ...

  3. 53 -leetcode 7. 整数反转

    //看看人家 写的多简单 INT_MIN INT_MAX 2^31 -1 -2^31 7. 整数反转 class Solution {public:int reverse(int x) {int fh ...

  4. LeetCode NO7. 整数反转

    给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果. 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0. 假设环境不允许存储 64 ...

  5. php 反转一个整数,LeetCode PHP 整数反转

    友情提示:此篇文章大约需要阅读 2分钟16秒,不足之处请多指教,感谢你的阅读. 题目 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 32 ...

  6. LeetCode 7. 整数反转 Reverse Integer 官网答案的条件判定的一点思考

    关于solution中的公式不知道是否清楚,在刚开始看的时候认为条件之一应当是rev<(Integer.min-pop)/10这个条件,因为rev*10+pop>Integer.min时才 ...

  7. C++ leetcode 7. 整数反转 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

    一.思路 转化成string, 有负号先去掉负号,然后从string的尾部开始遍历,每一个字符放到第一个另一个字符串中去. int reverse(int x) {if (x == 0)return ...

  8. leetcode 7整数反转和leetcode 9回文数

    关键代码片 while(x>reverseN){reverseN = reverseN * 10 + x%10;x = x/10;} while (x != 0) {int pop = x % ...

  9. LeetCode 7 整数反转

    解决方案 class Solution {public int reverse(int x) {String str = String.valueOf(x);String s = "&quo ...

  10. LeetCode 07. 整数反转

    原题描述 个人解法思路 class Solution { public:int reverse(int x) {int temp=0;//需要返回的最后结果while(x!=0){if(temp> ...

最新文章

  1. windows AD/DNS服务器搭建
  2. flutter打开android界面,在已有Android项目中使用Flutter
  3. 在IIS(64位)上部署WCF服务访问Oracle数据库
  4. android6.0源码分析之Activity启动过程
  5. import numpy as np_纪录27个NumPy操作
  6. java hanlp分词_Hanlp分词实例:Java实现TFIDF算法
  7. Android开发之引用三方库导致SO库冲突的解决办法
  8. php 采集不到内容_Thinkphp5与QueryList,也可以实现采集(爬虫)页面功能
  9. Disruptor内存消息队列的资料整理
  10. 春节7天新增病毒54万 钓鱼欺诈成最大威胁
  11. WINDOWS7都谢幕了,微软为何不出个补丁包?
  12. php绕过验证码注册,验证码被绕过的处理方法_PHP教程
  13. 线程安全问题和Synchronized的使用
  14. 我国大部地区遭罕见寒潮 23省区应急响应
  15. 科技云报道:“Sky Computing”会是云计算未来的新方向吗?
  16. 小红书行业黑话大全,小红书专业术语一手掌握
  17. Java经典面试题总结(附答案)-java经典面试题大全总结以及整理
  18. (6.1)MATLAB机器人正、逆解中姿态求解的欧拉角的说明
  19. Azure媒体服务的Apple FairPlay流功能正式上线
  20. 德国语言+留学签证递交材料详解(上海)

热门文章

  1. Centos干净卸载apache-php-mysql
  2. 重写( override)and 重载(overload)
  3. bbs小项目整理(六)(消息发布)
  4. oc快速生成单例头文件解析
  5. MM模块采购收货的错误解决方案(2)
  6. 手把手教你做关键词匹配项目(搜索引擎)---- 第十一天
  7. python中的成员运算符用于判断什么_Python3基础-表达式和运算符
  8. unity 2d文字跟随主角移动_太可了!这些领域可以把Unity玩的那么好,带你开启新世界...
  9. c语言输入数字 获取星期几,输入字母,判断星期几,求大神指点
  10. LeetCode4 寻找两个正序数组的中位数