首页 > 编程知识 正文

算法系列:整数反转(字符串)

时间:2023-05-03 21:10:57 阅读:103222 作者:4537

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;

}

返回数字;

};

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。