美文网首页
7. 整数反转(简单)

7. 整数反转(简单)

作者: zdxhxh | 来源:发表于2019-09-28 20:38 被阅读0次

    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
    };
    

    相关文章

      网友评论

          本文标题:7. 整数反转(简单)

          本文链接:https://www.haomeiwen.com/subject/mmqfuctx.html