前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【LeetCode题解---007】 Reverse Integer

【LeetCode题解---007】 Reverse Integer

作者头像
周三不加班
发布2019-09-04 16:16:12
3640
发布2019-09-04 16:16:12
举报
文章被收录于专栏:程序猿杂货铺

友情提醒:

大家好,国庆节快乐呀!假期第二天,不管是出门游玩,还是宅在家,都希望你们过得开心。但要想不虚度这美好假期生活,也可以选择看书、学习新技能来提升自己,充实自己。假期是超越对手的好机会,大家可以试试看。

今天的题目很简单,毕竟大过节的,也不能太放肆,不能太为难自己。 另外,手机预览代码格式不佳的用户可以点击文章底部 查看原文

最后愿你们能静心享受生活,学习提升自己,没有辜负大好时光。

1

题目

Given a 32-bit signed integer, reverse digits of an integer.

Example 1:

代码语言:javascript
复制
Input: 123Output: 321

Example 2:

代码语言:javascript
复制
Input: -123Output: -321

Example 3:

代码语言:javascript
复制
Input: 120Output: 21

Note: Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−231, 231 − 1]. For the purpose of this problem, assume that your function returns 0 when the reversed integer overflows.

2

词汇学习

environment 环境 purpose 目的

3

惊人而又蹩脚的中文翻译

数字转置,就是把一个整数顺序颠倒,要注意越界

4

代码实现-Java

01

解法一

转换成字符串,然后进行字符串转置,可以利用字符数组进行,也可利用StringBuffer 的 reverse()方法

这个题主要的考察点在于数值越界的判断上 真正的转置过程其实并不难

代码语言:javascript
复制
public static int reverse(int x) {
        String temp;
        // 是否负数
        boolean isNegativeNumber = false;
        if (x == 0) {
            return x;
        }
        // 数值越界
        if (x == Integer.MIN_VALUE || x == Integer.MAX_VALUE) {
            return 0;
        }
        if (x < 0) {
            // 负数
            isNegativeNumber = true;
            x = -x;
        }
        // 正数
        temp = String.valueOf(x);
        StringBuilder resultStr = new StringBuilder(temp).reverse();
        if (isNegativeNumber) {
            temp = "-" + resultStr.toString();
        } else {
            temp = resultStr.toString();
        }
        Long res = Long.parseLong(temp);
        return (res > Integer.MAX_VALUE || res < Integer.MIN_VALUE) ? 0 : Integer.parseInt(res.toString());
    }

02

解法2

使用数学知识来解决,通过不断 /10 和 %10 的方式来解决这个问题

代码语言:javascript
复制
public static int reverse_2(int x) {
        Long result = 0L;
        while (x != 0) {
            // 通过不断取余数的方式得到该值得最后一位数字
            result = result * 10 + x % 10;
            // 不断取整的方式缩小这个目标数字
            x /= 10;
        }
        return (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) ? 0 : Integer.parseInt(result.toString());
    }

5

代码实现-Python

01

解法一

同java版本解法二一样,循环通过对10取模得到尾部数字,一步步乘10构造新的翻转后的整数即可。

但是要注意首先判断数值的正负,最后还要判断结果是否溢出。

代码语言:javascript
复制
class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        flag = 1 if x >= 0 else -1
        new_x, x = 0, abs(x)
        while x:
            new_x = 10 * new_x + x % 10
            x /= 10
        new_x = flag * new_x
        return new_x if new_x < 2147483648 and new_x >= -2147483648 else 0

02

解法二

利用Python的字符串反转操作来实现对整数的反转,反转后的字符串要重新转换为整数。同样的道理,要注意正负和溢出情况。

代码语言:javascript
复制
class Solution(object):
    def reverse(self, x):
        """
        :type x: int
        :rtype: int
        """
        x = int(str(x)[::-1]) if x >= 0 else - int(str(-x)[::-1])
        return x if x < 2147483648 and x >= -2147483648 else 0

以上代码会同步更新在本人的Github和CSDN上

Github地址:https://github.com/Bylant/LeetCode

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员啊粥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档