给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
解答:
先来个我自己看不懂的~
var reverse = function(x) {
let result = 0;
while(x !== 0) {
result = result * 10 + x % 10;
x = (x / 10) | 0;
}
return (result | 0) === result ? result : 0;
};
这个是真的没看懂 超出了我的理解范围
不慌 在看其他的
var reverse = function(x) {
// x ->num
var str = x.toString()
//str->String 转成字符串 转字符串 .toString()
let arr = str.split('');
//arr->Array 然后在转成数组,split() 方法用于把一个字符串分割成字符串数组。
// 判断是否有负号
if(arr[0]!=="-"){
let num =Number(arr.reverse().join(''));
// reverse() 方法用于颠倒数组中元素的顺序。
// join() 方法用于把数组中的所有元素转换一个字符串。元素是通过指定的分隔符进行分隔的。
// Number()函数把对象的值转换为数字
if(num <= 2147483647 && num >= -2147483648){ // 这里是要求是给出一个32位的有符号整数
// JavaScript仅支持32位整型数,也即从-2147483648到+2147483647之间的整数。
return num;
}else{
return 0
}
}else if(arr[0]==="-"){
delete arr[0]; // 删除-符号
let num =Number(arr.reverse().join(''));
// 用Number 转换一下的意思是 第一位为0 的时候自动过滤
if(num <= 2147483647 && num >= -2147483648){
return ~num+1;
// ~ 取反运算符 取反的时候会自动减1 因为-删除了 所以取反在加上
}else{
return 0
}
}
};
总体的思路就是
1.把数值转成字符串,然后在分割成数组,
2.判断数组的第一位是不是 负号
3.不是 负数的时候直接 用reverse() 方法 颠倒数组顺序,在用 join('') 转成字符串 ,最后转成数字类型 顺便这把第一位为0过滤掉
4.是 负数的时候删除-负号 然后在走一遍转换 在取反一下
5. JavaScript仅支持32位整型数,也即从-2147483648到+2147483647之间的整数。 这个就对应着 题目要求 32 位的有符号整数 在程序中判断下就好了
总结 第一种方法对我现在来说有点理解不透 数学很渣。。。。 继续努力 如果有大神能给解析下 就更好了
此题为力扣上的题 答案借鉴力扣