Leetcode 整数反转
题目描述
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123 输出: 321
示例 2:
输入: -123 输出: -321
示例 3:
输入: 120 输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reverse-integer
题解
题解分析
看到整数排序,我们自然想到两种解法:
将数字转换为字符串,然后利用字符串的方法进行重新排序
本来不是特别想把这种写法写出来,但是发现这种想法在Leetcode上点赞还挺高呢 ~。~,你瞅瞅:
所以就写出来啦。
但是,这种写法效率是非常低的,后面会将两种算法的执行效率进行一个对比,大家可以参考一下。
利用整数的除法对现有数据进行重排序
这种解法是Leetcode里面使用比较多的一种,简单分析一下这种写法:
通过while循环来判断x是否被除尽
对输入的参数进行出栈,将结果保存到pop里面,这里采用的是取余的方法。
在Java里面的除法有两种:
2.1 一种是取整,是使用“/”,最后的结果会保存整数部分,举个栗子:123/10,最后显示的结果是12
2.2 另一种是取余,是使用“%”。,最后的结果会保存没有被除完的部分,举个栗子:123%10,最后显示的结果是3
将输入的参数进行去尾,也就是将123中的3从最后一位去掉
对拼装后的结果进行验证,确保没有大于整数的最大值,并没有小于整数的最小值。这里以大于最大值说明:
rev>Integer.MAX_VALUE/10
如果拼装的结果大于整数最大的前10位,那么结果必大于整数最大值rev == Integer.MAX_VALUE / 10 && pop > Integer.MAX_VALUE % 10
或者rev结果和整数最大值相等,但是余数大于整数最大值的最末尾
最返回结果进行入栈操作,和之前出栈相反
两种算法对比
算法 | 执行耗时 | 内存消耗 |
---|---|---|
算法1 | 4 ms,击败了16.91% 的Java用户 | 37.2 MB,击败了5.33% 的Java用户 |
算法2 | 1 ms,击败了100.00% 的Java用户 | 37.1 MB,击败了5.33% 的Java用户 |
总结
通过两种算法的编写,真真切切的感觉到有了算法,能对系统的执行效率得到很大的提高,用数据打脸了一波算法无用论的编程工作者(包括本菜狗?),看来以后要把算法列入必学的内容之一了,不然要被diss到死啊!