【算法】7. 整数反转(多语言实现)

简介: 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。

7. 整数反转:

给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。

如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。

假设环境不允许存储 64 位整数(有符号或无符号)。

样例 1:

 输入:

     x = 123

输出:

    321

样例 2:

输入:

    x = -123

输出:

    -321

样例 3:

输入:

    x = 120

输出:

    21

样例 4:

输入:

    x = 0

输出:

    0

提示:

  • -231 <= x <= 231 - 1

分析:

  • 面对这道算法题目,二当家的陷入了沉思。
  • 从最后一位逐渐向前拼接,可以想像成栈数据结构,取出最后一位放到结果的最后一位,这样循环完毕相当于整体反转,唯一要注意的就是处理超过32位有符号数的范围。

题解:

rust:

impl Solution {
   
    pub fn reverse(mut x: i32) -> i32 {
   
        let max = i32::MAX / 10;
        let min = i32::MIN / 10;
        let mut ans = 0;
        while x != 0 {
   
            if ans > max || ans < min {
   
                return 0;
            }
            ans = ans * 10 + x % 10;
            x /= 10;
        }

        ans
    }
}

go:

func reverse(x int) (ans int) {
   
    for x != 0 {
   
        if ans < math.MinInt32/10 || ans > math.MaxInt32/10 {
   
            return 0
        }
        digit := x % 10
        x /= 10
        ans = ans*10 + digit
    }
    return
}

c++:

class Solution {
   
public:
    int reverse(int x) {
   
        int ans = 0;
        while (x != 0) {
   
            if (ans < INT_MIN / 10 || ans > INT_MAX / 10) {
   
                return 0;
            }
            int digit = x % 10;
            x /= 10;
            ans = ans * 10 + digit;
        }
        return ans;
    }
};

python:

class Solution:
    def reverse(self, x: int) -> int:
        INT_MIN, INT_MAX = -2**31, 2**31 - 1
        ans = 0
        while x != 0:
            if ans < INT_MIN // 10 + 1 or ans > INT_MAX // 10:
                return 0
            digit = x % 10
            if x < 0 and digit > 0:
                digit -= 10
            x = (x - digit) // 10
            ans = ans * 10 + digit
        return ans

java:

class Solution {
   
    public int reverse(int x) {
   
        final int max = Integer.MAX_VALUE / 10;
        final int min = Integer.MIN_VALUE / 10;
        int       ans = 0;
        while (x != 0) {
   
            if (ans > max || ans < min) {
   
                return 0;
            }
            ans = ans * 10 + x % 10;
            x /= 10;
        }
        return ans;
    }
}

非常感谢你阅读本文~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://developer.aliyun.com/profile/sqd6avc7qgj7y 博客原创~


相关文章
|
2月前
|
自然语言处理 Rust 算法
【算法】13. 罗马数字转整数(多语言实现)
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 | 字符 | 数值 | |--|--| | I | 1 | | V | 5 | | X | 10 | | L | 50 | | C | 100 | | D | 500 | | M | 1000 | 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1
【算法】13. 罗马数字转整数(多语言实现)
|
2月前
|
算法 Java
[Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
[Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
32 0
|
6天前
|
自然语言处理 Rust 算法
【算法】17. 电话号码的字母组合(多语言实现)
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
【算法】17. 电话号码的字母组合(多语言实现)
|
1月前
|
算法 自然语言处理 Rust
【算法】16. 最接近的三数之和(多语言实现)
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。
|
28天前
|
SQL 算法 数据挖掘
深入探索力扣第12题:整数转罗马数字的算法之旅
深入探索力扣第12题:整数转罗马数字的算法之旅
|
2月前
|
算法 C语言
【C语言】求最小新整数(贪心算法)
【C语言】求最小新整数(贪心算法)
24 1
|
2月前
|
算法
简记二分算法模板与代码案例:整数二分和浮点数二分
本文介绍了两种算法模板,分别是整数二分和浮点数二分。
20 0
|
2月前
|
自然语言处理 Rust 算法
【算法】15. 三数之和(多语言实现)
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。
|
2月前
|
自然语言处理 Rust 算法
【算法】14. 最长公共前缀(多语言实现)
编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。
|
2月前
|
算法 测试技术 C++
【数论】【分类讨论】【C++算法】1611使整数变为 0 的最少操作次数
【数论】【分类讨论】【C++算法】1611使整数变为 0 的最少操作次数