题目:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
示例 1:
输入:x = 123
输出:321
示例 2:
输入:x = -123
输出:-321
示例 3:
输入:x = 120
输出:21
示例 4:
输入:x = 0
输出:0
提示:
-231 <= x <= 231 - 1
解法一:
解题思路
result * 10 + x % 10 取出末位 x % 10(负数结果还是负数,无需关心正负),拼接到 result 中。
x / 10 去除末位,| 0 强制转换为32位有符号整数。
通过 | 0 取整,无论正负,只移除小数点部分(正数向下取整,负数向上取整)。
result | 0 超过32位的整数转换结果不等于自身,可用作溢出判断。
运算过程:
x | result |
---|---|
123 | 0 |
12 | 3 |
1 | 32 |
0 | 321 |
代码:
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
let result = 0;
while(x !== 0) {
result = result * 10 + x % 10;
x = (x / 10) | 0;
}
return (result | 0) === result ? result : 0;
};
作者:zoffer
链接:https://leetcode-cn.com/problems/reverse-integer/solution/wei-yun-suan-ji-jian-jie-fa-by-ijzqardmbd/
解法二:
暴力法 转成字符串
代码:
/**
* @param {number} x
* @return {number}
*/
var reverse = function(x) {
let now = Math.abs(x).toString().split("").reverse().join("");
if(x < 0){
return now <= Math.pow(2,31) ? -now : 0;
}else{
return now < Math.pow(2,31) ? now : 0;
}
};
作者:lvshanke
链接:https://leetcode-cn.com/problems/reverse-integer/solution/zhi-xing-yong-shi-chao-guo-9617nei-cun-xiao-hao-ch/
结语:
书到用时方恨少,白首方悔读书迟
。小伙伴们,算法在程序中的重要性不言而喻,而且,想摆脱初中级程序员的枷锁,算法是我们或多或少都要掌握的,可以不用做到精通,但是我们一定要熟知一些常见的算法
考虑到大多数的小伙伴并不会花大量的时间去刷枯燥乏味
的算法题,这个专栏就每日为小伙伴们推送一道难度为简单
的算法题,希望能在面试的时候祝大家一臂之力。
小伙伴们可以利用食堂排队、等公交、睡前甚至蹲厕所
的十来分钟时间来阅读一下这里分享的每日一题,充分利用我们的闲鱼
时间,去提升自己。我们都知道一直坚持做一件事的人是非常可怕,那就让我们一起成为这样的人,日积月累,滴水穿石,相信长此以往的小伙伴一定会有一个质的飞跃。
最后,既然选择了前端,便只顾风雨兼程
,加油,前端小伙伴们!
The End
前端应知应会既然选择了前端,便只顾风雨兼程。
“在看”吗? 在看就点一下吧