第四天:力扣第7题,整数反转
地址:leetcode-cn.com/problems/re…
思路:我是直接当初数组处理了,因为数组有一个方法就是反转。不多说了,直接上代码:
var reverse = function(x) {
let a = Math.abs(x).toString().split("").reverse().join("");//转化成数组反转后再转化成字符串输出。
if(a>2**31-1)
{return 0;}
if(x>=0)
{return a;}
else{
return -a;
}
};
执行用时:104 ms, 在所有 JavaScript 提交中击败了59.94%的用户
内存消耗:38.9 MB, 在所有 JavaScript 提交中击败了22.01%的用户
同时找了一个大佬的代码:
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;
};
他的思路我能理解,就是通过取余将数字反转过来,这里有个小知识点,他用的是|0,这个是取整,10.5|0=10,但是-10.5|0也是-10,这个与Math.floor不一样,所以这个方法减少了运行负载。
其实前面的都可以理解,但是最后的代码我还是理解不了,他最后代码的意思是先对result取整,再与result进行绝对比较,===表示同等符,必须值与类型全部相等的时候才会返回true,若是true则返回result,否则返回0;
他是用这个方法判断是否溢出,但是我还是没能理解为什么能判断溢出,这个(result|0)===result不是很懂,我自己琢磨琢磨吧。
琢磨出来了:文章的最下面