`
frank-liu
  • 浏览: 1684078 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

leetcode: Reverse Integer

 
阅读更多

问题描述:

Reverse digits of an integer.

Example1: x = 123, return 321
Example2: x = -123, return -321

 

原问题链接:https://leetcode.com/problems/reverse-integer/

 

问题分析

    将一个数字倒过来转换,看起来是一个很容易的过程。我们可以定义一个整数result = 0,每次在对输入值取最后一位(remain = x % 10)的时候进行result = result * 10 + remain。当然,考虑到数字的正负问题,我们可以用一个boolean变量来记录。在最开始的时候对数字取绝对值。

    按照上述的思路,我们可以很快得到如下的一段代码:

 

public class Solution {
    public int reverse(int x) {
        boolean positive = x > 0;
        int y = Math.abs(x);
        int result = 0;
        while(y > 0) {
            int remain = y % 10;
            result = result * 10 + remain;
            y /= 10;
        }
        return positive ? result : -result;
    }
}

     看起来一切都挺好的,可是实际上我们运行的时候在一些情况下会出问题,比如说输入数字为1534236469的时候。因为如果我们把这个数字倒过来,它就是9646324351,已经超过int数值所能表示的范围。所以它就导致溢出了。上述代码的一个潜在的问题就是忽略了一点,我们对这个result不断累加的时候它会超过int值范围。所以我们需要考虑一种办法来解决这个问题。

    该怎么解决这个问题呢?一种办法就是在代码执行的过程中去判断它是不是接近那个溢出的临界点值。我们取max = Integer.MAX_VALUE / 10。然后再针对当我们取的result的值在某一位的时候是否达到了可以表达的值的上限。这种情况其实比较麻烦,因为我们需要去查这个值为多少,而且是根据正数负数的情况来判断。关键是这个数字要去找,而且也比较容易出错。

    其实,还有一种更加简洁有效的方法。上面那个问题的根源是我们进行正数变换的时候导致数字太大了超出了int的范围。而如果我们先用long类型来表示这个数字呢?这样我们做的这种转换是不会导致溢出的。做了转换之后我们需要做的就是再把转换后的数字变成整数。因为是长整数类型,在得到的数字超出整数范围的情况下,我们可以返回0。而对于正常的情况就直接转换成整形就可以了。这样连数字的正负属性都不用考虑。

 

public class Solution {
    public int reverse(int x) {
        long answer = 0;
        while(x != 0) {
            answer = 10 * answer + x % 10;
            x /= 10;
        }
        return (answer > Integer.MAX_VALUE || answer < Integer.MIN_VALUE) ? 0 : (int) answer;
    }
}

 

总结

    看似简单的问题也有一些有意思的思路。像这里如果去针对整数类型的范围来判断的话会比较麻烦。而干脆用一个数值表示类型更大的类型来表示,再得到结果后做一些合理的转换。这种方法要简单巧妙不少。

2
3
分享到:
评论

相关推荐

    LeetCode7 Reverse Integer

    【LeetCode7 Reverse Integer】是LeetCode平台上的一个经典编程挑战,主要考察的是对整数操作的理解和逻辑处理能力。这个题目要求我们给定一个32位有符号整数,将其数字顺序反转。例如,输入123,输出321;输入-123...

    leetcode卡-leetcode:一些leetcode问题的解决方法,请注意license!

    Leetcode\ReverseInteger\ReverseInteger.cs 问题: 业绩报告: 回文数 代码: Leetcode\PalindromeNumber\PalindromeNumber.cs 问题: 从排序数组中删除重复项 代码: Leetcode\RemoveDuplicates\RemoveDuplicates....

    leetcode第321题-LeetCode-Reverse_Integer:LeetCode-Reverse_Integer

    第321题Reversed_Integer Java中的LeetCode逆整数问题解决方案 问题 - 给定一个有符号的 32 位整数 x,返回 x 其数字颠倒。 如果反转 x 导致值超出有符号的 32 位整数范围 [-231, 231 - 1],则返回 0。 假设环境不...

    javalruleetcode-LeetCode:LeetCode算法问题

    java lru leetcode Fighting for a job! 记录找工作期间搬运的题,全部使用Java实现,本人C++鶸 1 ...LeetCode ...LeetCode ...LeetCode ...LeetCode ...LeetCode ...LeetCode ...LeetCode ...LeetCode ...Integer LeetCode 6 Zi

    c语言-leetcode 0007-reverse-integer.zip

    c c语言_leetcode 0007_reverse_integer.zip

    leetcode2-Leetcode:Leetcode_answer

    Reverse Integer JavaScript O(n) O(1) Easy 9 Palindrome Number JavaScript O(n) O(1) Easy 19 Remove Nth Node From End of List JavaScript O(n) O(1) Medium 21 Merge Two Sorted Lists JavaScript O(n)

    0-leetcode:leetcode练习:twosum问题;addtwonumbers问题;reverse integer问题;最大不重复子字符串长度问题等,详细见readme.md;

    3. **Reverse Integer (反转整数)**: 题目要求将一个整数的位序反转。这个问题涉及到整数的位运算,如右移(&gt;&gt;)和左移()操作,以及处理溢出的情况。在C++中,需要特别注意整数的正负号和溢出问题,通常使用长期...

    leetcode知乎-leetcode:leetcode解决方案

    leetcode 知乎 此项目介绍 此项目旨在是为leetcode里面的习题提供解析(数据结构相关知识),锻炼了自己,同时也给别人带来了方便。 网站习题链接: ** 作者知乎链接**: 关于习题 ...Integer Strin

    lrucacheleetcode-leetcode:leetcode

    lru缓存leetcode leetcode 1. Two Sum 2. Add Two Numbers 3. Longest Substring Without Repeating Characters 4. Median of Two Sorted Arrays 5. Longest Palindromic Substring 7. Reverse Integer 9. ...

    leetcode338-LeetCode:LeetCode刷题总结

    LeetCode刷题总结 1.Two Sum 2.Add Two Numbers 3.Longest Substring Without Repeating Characters 4.Median of Two Sorted Arrays 5.Longest Palindromic Substring (Manacher算法待完成) 6.ZigZag Conversion 7....

    leetcode答案-leetcode:leetcode问题解决方案

    leetcode 答案 Leetcode题解 leetcode题库的答案及解决思路,随着解题的深入,题解会不断改进时间...Reverse Integer Easy com.bcat.algorithms.easy.ReverseIntegerSol 8 String to Integer (atoi) Medium com.bc

    leetcode题库-LeetCode:力码

    Reverse Integer.cpp 9 回文数 Palindrome Number.cpp 12 整数转罗马数字 Integer to Roman.cpp 13 罗马数字转整数 Roman to Integer.cpp 15 三数之和 3Sum.cpp 最接近的三数之和 3Sum Closest .cpp 20 有效的括号 ...

    leetcode双人赛-LeetCode:力扣笔记

    leetcode双人赛LeetCode 编号 题目 难度 题型 备注 Two Sum 简单 Add Two Numbers 中等 链结串列 重要 Longest Substring Without Repeating Characters 中等 字串 重要 Median of Two Sorted Arrays 困难 数学 ...

    leetcode2sumc-leetcode:JavaScript版本leetcode中文版代码

    Reverse Integer 简单 8 String to Integer (atoi) 中等 9 Palindrome Number 简单 11 Container With Most Water 中等 12 Integer to Roman 中等 13 Roman to Integer 简单 14 Longest Common Prefix 简单 15 3Sum ...

    Study-Algorithm-Leetcode:[研究]学习算法-Leetcode

    指数姓名有效码无效的代码2个 3 4 5 6 7ReverseInteger.java 8 字符串到整数(atoi) StringToInteger.java StringToInteger(Invalid).java 11 装满水的容器ContainerWithMostWater.java 12 整数到罗马...

    LeetCode判断字符串是否循环-leetcode:leetcode

    LeetCode判断字符串是否循环 Leetcode刷题笔记 1. 题目描述 给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值...代码:reverse_integer.py 字符串切片及翻转 &gt;&gt;&gt; a = '0123456' &gt;&gt;&gt; a[1:5] '123

    leetcode2sum-Problems:编程问题的回购

    leetcode 2sum # Programming-Problems This will have many problems from all ...LeetCode: ...Reverse Integer [Easy] LC8: String To Integer Atoi [Medium] LC9: Palindrome Number [Easy] LC11:

    leetcode分类-Leetcode:cpp中的Leetcode解决方案(已解决424个)

    leetcode 分类 Leetcode 总结 (updating) # Title Solution 1 Two ...用unordered_map,降至O(n) ...一个变量存储进位,当l1,l2,进位非均为空时,继续计算 ...Reverse Integer 8 String to Integer (atoi) 9 Palind

    javalruleetcode-Leetcode:力码解决方案

    java lru leetcode Leetcode-Java Use Java to solve Leetcode&JianZhiOffer problems. Leetcode Num Title Difficulty Tag 1 Two ...Reverse Integer (整数反转) Easy Math 8 String to Integer (ato

    leetcodepython001-LeetCode:力码

    007_Reverse_Integer 2021 年 1 月 7 日 Python 003 009_Palindrome_Number 2021 年 1 月 7 日 Python 004 013_Roman_to_Integer 2021 年 1 月 9 日 Python 005 014_Longest_Common_Prefix 5 月 12 日。 2021年 ...

Global site tag (gtag.js) - Google Analytics