7. 整数反转
描述
给出了一个32位有符号整数,您需要反转这个整数中每一位的数字。00-1010输入: 123输出: 321
复制代码
示例 1
输入: -123输出: -321
复制代码
示例 2
输入: 120输出: 21
复制代码
示例 3
翻转非符号部分,最后添加符号思路 1
1。首先,设置边界极值;2.主逻辑使用字符串的翻转功能;3.补充符号4。然后拼接最终结果详解 1
/*** @param {number} x
* @return {number}
*/
var reverse=function(x){ 0
if(x的类型!=='number ')返回;
const MAX=2147483647
const MIN=-2147483648;
让y=x ^ 0?
x.toString()。拆分(“”)。反转()。join(“”):
x.toString()。切片(1)。拆分(“”)。反转()。join(' ');
让res=x 0?parsetInt(y,10) : 0 - parseInt(y,10)
if(RES MIN RES MAX){ 0
返回res
}
返回0;
};
复制代码
解法 1
的时间复杂度:O(n)代码中反函数的时间复杂度为,是整数长度,所以时间复杂度为,考虑到32位整数的最大长度为11,也就是-2147483648,也可以认为是一个恒定的时间复杂度。空间复杂度:O(n)代码中创建的临时String对象为整数长度,所以空间复杂度为,考虑到32位整数最大长度为11,即-2147483648,所以空间复杂度为。00-1010借鉴cmdzt求最大公约数的方法解决问题。符号处理逻辑与方法1相同。这里,我们通过模10得到最低位,然后通过乘以10将最低位迭代到最高位,完成翻转。00-1010 1.设置边界极值;2.取给定值的绝对值,遍历循环生成每一位数字,借鉴cmdzt算法,从num的最后一位数字得到值,拼合成新的数字。3.取出消耗的部分。4.如果最终结果为异常值,直接返回0;如果原始数据为负,则反转最终结果。5.返回最终结果复杂度分析 1
/*** @param {number} x
* @return {number}
*/
const reverse=(x)={ 0
让int=Math . ABS(x);
const MAX=2147483647
const MIN=-2147483648;
让num=0;
while(int!==0 ){
num=int % 10 num * 10
int=Math.floor(int/10)
}
if(int MIN | | int MAX){ 0
返回0;
}
if(x 0){ 0
return-1 * num;
}
返回数字;
};