LeetCode 第7题 反转整数 -- JavaScript

题目描述:

给定一个 32 位有符号整数,将整数中的数字进行反转。要求如下:

  1. 只翻转数字,符号位不进行翻转。
  2. 假设我们的环境只能存储 32 位有符号整数,其数值范围是\small [-2^{31}, 2^{31}-1]如果反转后的整数溢出,则返回 0。
  3. 不能借助JS原生的 reverse 函数。

示例:

输入: 123
输出: 321
输入: -123
输出: -321
输入: 120
输出: 21
输入: 2147483649
输出: 0

方法分析:

  1. 因为整数不可遍历(not iterable),故先需将整数转换为字符串,从而为可遍历(iterable)对象,然后倒序遍历字符串,依次将值压入(push)结果数组中。
  2. 然后,我们需要判断是否包含符号位。如果有符号位,就将该符号位放入结果数组的头部(head),若无符号位,则将最后一位压入结果数组中。
  3. 将结果数组转换为整数,并判定其是否在指定范围内,若在,则返回该值,否则返回0。

流程图实现:

以输入为-123为例,执行流程为:

代码实现:

var reverse = function(x) {
   var resultArr = [];
   var intToStr = x.toString();
   for(var i = intToStr.length-1;i > 0;i--){
       resultArr.push(intToStr[i]);
   }
   if(intToStr[0] == "-"){
       resultArr.unshift("-");
   }
   resultArr.push(intToStr[0]);
   var resultNum = parseInt(resultArr.join(""));
   if(resultNum <= Math.pow(-2,31) || resultNum >= Math.pow(2,31) - 1 ){
       return 0;
   }
   return resultNum;
};

代码解析:

该算法的时间复杂度为O(n) 

该算法的空间复杂度为:O(n) 

相关链接:https://leetcode-cn.com/problems/reverse-integer/description/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值