7. 整数反转(简单)

2019-09-28  本文已影响0人  zdxhxh

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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

image.png

解法:算法基本思路:

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
};
上一篇下一篇

猜你喜欢

热点阅读