gpt4 book ai didi

算法题分析:反转整数

转载 作者:我是一只小鸟 更新时间:2023-06-02 14:31:12 31 4
gpt4 key购买 nike

最近刷到了一道medium难度的算法题,比较典型,可以用语法特性和常规解法来解决。题目如下:

                        
                          给定一个32字节的有符号整型数字x,将x反转过来返回。如果反转x会让其数值超出32位有符号整型数字范围[-2^31, 2^31 -1],那么就返回0。
假设运行环境不允许你存储64位整型数字(有符号或者无符号)。
Example 1:

Input: x = 123
Output: 321
Example 2:

Input: x = -123
Output: -321
Example 3:

Input: x = 120
Output: 21

约束条件:
-2^31 <= x <= 2^31 - 1

                        
                      

反转整数有两个大的思路,一个是把数字转换成字符串,然后把正负号单独保存,针对纯数字的字符串进行反转,当然还是要注意超出32位整型数值范围要返回0的边界情况。几乎所有编程语言都有大量针对字符串的内置函数,所以该算法非常取巧.

用js具体的解法如下:

                        
                          /**
 * @param {number} x
 * @return {number}
 */
var reverse = function(x) {
    let ans = x.toString().split('').reverse().join('');
    if (x < 0) {
        ans = ans.substr(0, ans.length -1) * -1;
    }
    if (x >= Math.pow(2, 31) -1 || x < -1 * Math.pow(2, 31)) return 0;
    return ans;
}

                        
                      

这个解法比较巧妙,绕过了传统思维里面针对数字的处理,但是空间复杂度效率不高.

另外一种解法就是通过除10来反转数字,具体如下:

                        
                          var reverse = function(x) {
    if (x / 10 < 1) return x;
    let reverse  = 0;
    const isNegative = (x < 0) ? -1 : 1;
    let num  = num * isNegative;

    while (num >= 1) {
        diff = Math.floor(num % 10);
        reverse = reverse * 10 + diff;
        num = num /10;
    }

    if (num > Math.pow(2, 31) - 1) return 0;
    return num * isNegative;

}

                        
                      

最后此篇关于算法题分析:反转整数的文章就讲到这里了,如果你想了解更多关于算法题分析:反转整数的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com