题目描述:
给定一个 32 位有符号整数,将整数中的数字进行反转。要求如下:
- 只翻转数字,符号位不进行翻转。
- 假设我们的环境只能存储 32 位有符号整数,其数值范围是。如果反转后的整数溢出,则返回 0。
- 不能借助JS原生的 reverse 函数。
示例:
输入: 123
输出: 321
输入: -123
输出: -321
输入: 120
输出: 21
输入: 2147483649
输出: 0
方法分析:
- 因为整数不可遍历(not iterable),故先需将整数转换为字符串,从而为可遍历(iterable)对象,然后倒序遍历字符串,依次将值压入(push)结果数组中。
- 然后,我们需要判断是否包含符号位。如果有符号位,就将该符号位放入结果数组的头部(head),若无符号位,则将最后一位压入结果数组中。
- 将结果数组转换为整数,并判定其是否在指定范围内,若在,则返回该值,否则返回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/