7.给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法:算法基本思路:
s1: ans作为反转数变量 ,初始值为0
s2: 进入while循环,x为初始值,当x=0时退出
s3: 求x的余数,命名为pop,如4396可以获得pop=6
s4: 尾数ans = ans*10 + pop
s5:判断反转数是否大于或等于数值范围最大值,或是小于等于数值范围的最小值,若是,进入s7
s6: 若x大于0,则对x赋值x/10(向下取整),若x<0,则x=x/10(向上取整),进入s2
s7: 反转后的数值不在数值范围,退出
使用Math.pow(x,y) // x:底数 y:幂次数
,可以计算出数值范围,分别为2147483647,-2147483648,
var reverse = function(x) {
const MAX_VALUE = Math.pow(2,31)- 1
const MIN_VALUE = Math.pow(-2,31)
let ans = 0
while(x!=0) {
// 求模,相当于求x的最小位数
const pop = Math.floor(x%10)
ans = ans*10 +pop
if(ans >=MAX_VALUE ) {
return 0
}
if(ans <=MIN_VALUE){
return 0
}
x = x>0?Math.floor(x/10):Math.ceil(x/10)
}
return ans
};