题目:
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
首先拿到这道题的想法就是转为字符串或者数组,然后计算完后再转为数值。但想到了更简单的方法,即:
%求余数的值*10 + x/10的值,具体代码如下:
var reverse = function(x) {
var rev = 0;
while(x!=0){
var pop = x%10;
if(x>0) x = Math.floor(x/10);
else if(x<0) x=Math.ceil(x/10);
rev = rev*10 + pop;
if(rev<Math.pow(-2,31) || rev>Math.pow(2,31)-1) return 0;
}
return rev;
};
有些细节需要注意:
1、对于正数来说,Math.floor向下取整,因此,0.6会等于0;Math.ceil向上取整,而对于负数来说,Math.ceil向上取整,因此,-0.6会等于-1。所以需要判断x与0的大小,再决定用向上或向下。
2、Math.pow是求方,不能使用-2^31。
本文为作者关于LeetCode的解法
大神解法请自己搜索