武功秘籍 之 整数反转

219 阅读3分钟

今天给大家准备了三个招式,助你巩固江湖地位

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

来源:力扣(LeetCode)leetcode.cn/problems/re…

示例 1:

输入: x = 123
输出: 321

示例 2:

输入: x = -123
输出: -321

示例 3:

输入: x = 120
输出: 21

招式一 “颠倒阴阳功”

听名字大概就知道,是将阴阳颠倒,本末倒置。
在我们这题里体现的就是,将 整数转成数组 反转一遍。 话不多说,直接上秘籍

var reverse = function(x) {
//不管如何颠倒,你属于哪个门派的还是得保留门派的标识,所以我们得保留符号位
    let sign = x > 0 ? 1 : -1 
    //先统一将数当成正数处理
    x= x>0 ? x : -x
    //接下来 就开始练习 颠倒阴阳功了,一共三个招式
    //第一招 先将 数字 转成 字符串
    //第二招 倒着遍历 字符串
    //最后 判断是否超出 界限 然后修炼结束
    let mid = x.toString() //一
    let len = mid.length

    let res = 0
    while(len--){//二
        res = res * 10 + (mid[len] - 0) 
    }
    //三
    res *= sign
    if (res < Math.pow(-2, 31) || res > Math.pow(2, 31) - 1) { return 0; }
    return res;
};

招式二 “乾坤大挪移”

乾坤大挪移 顾名思义 就是将两个人的功力进行调换 也就是 把你的变成我的

image.png

var reverse = function(x) {
    //不管如何颠倒,你属于哪个门派的还是得保留门派的标识,所以我们得保留符号位
    let sign = x > 0 ? 1 : -1 
    //先统一将数当成正数处理
    x= x>0 ? x : -x
    //一、先变化一下形态 练功总要付出一些代价的
    //所以先转成数组
    let arr = x.toString().split('')
    let start = 0
    let end = arr.length - 1
    
    //二、然后开始 开始转移 对半交换
    while(start <= end){
        let temp = arr[start]
        arr[start] = arr[end]
        arr[end] = temp
        start ++;
        end --;
    }
    
    //变回数字
    x = (arr.join('') - 0)* sign
    //因为容量有限 要是功力超出自己能够承受的极限 就只能回归起点 又变成了0
    if (x < Math.pow(-2, 31) || x > Math.pow(2, 31) - 1) { return 0; }
    
    //恭喜你 以习得“乾坤大挪移”
    return x;
   };

招式三 “除我余谁”

此招 乃是本章的终极大招 与前两招 不太一样
会依次的从后面挑选弟子来进行修炼,最后重组

var reverse = function(x) {
    let res = 0;
    //师傅会把所有技能都进行传输给弟子
    //直到 所有技能交完了 也就完成使命了
    //描述:依次取出最后一个数 知道这个数 取完
    while (x !== 0) {
    /**
    * 1、将12345 % 10 得到5,之后将12345 / 10
    * 2、将1234 % 10 得到4,再将1234 / 10
    * 3、将123 % 10 得到3,再将123 / 10
    * 4、将12 % 10 得到2,再将12 / 10
    * 5、将1 % 10 得到1,再将1 / 10
    */
        //技能:先取出 最后面的技能进行教学
        //描述:取出数字的最后一项
        const digit = x % 10;
        //技能:这个秘法 可以将 技能保留原来的门派的情况下 进行取整
        //描述:也就是保留符号取整
        x = ~~(x / 10);
        
        //技能:每当有一个新入一个弟子 前面的就成为师兄了 地位高 所以要✖️10
        //描述:原来的数
        res = res * 10 + digit;
        
        //这里如果超出 数字边界了,应题目要去,我们就直接返回0
        if (res < Math.pow(-2, 31) || res > Math.pow(2, 31) - 1) {
            return 0;
        }
    }
    return res;
};

以上技能纯属个人瞎编,大家看代码就好

image.png