今天给大家准备了三个招式,助你巩固江湖地位
给你一个 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;
};
招式二 “乾坤大挪移”
乾坤大挪移 顾名思义 就是将两个人的功力进行调换 也就是 把你的变成我的
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;
};
以上技能纯属个人瞎编,大家看代码就好