JavaScript 整数反转

给出一个 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 位的有符号整数  在程序中判断下就好了

 

 

总结 第一种方法对我现在来说有点理解不透  数学很渣。。。。 继续努力   如果有大神能给解析下 就更好了

 

此题为力扣上的题 答案借鉴力扣

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想是坚持

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值