Python学习日记——整数反转

Python学习日记001—整数反转

题目来源:LeetCode题库——整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
注:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
Example1:
输入:123
输出:321
Example2:
输入:-123
输出:-321
链接:https://leetcode-cn.com/problems/reverse-integer/

三位整数反转

对于位数较少的整数,我们可以通过取余数等方法依次取它的个位、十位、百位上的数字,然后将这三个数字倒序排列即可得到想要的结果。

class Solution:
    def reverse(self, x: int) -> int:
            if x > 0:
                a = x % 10   #得到个位数
                b = (x // 10) % 10   #得到十位数
                c = x // 100   #得到百位数
                reverse_number = int(str(a) + str(b) + str(c))   #位数反转
                return reverse_number
            else:
                abs_x = abs(x)    #将负数取绝对值按正数处理
                a = abs_x % 10
                b = (abs_x // 10) % 10
                c = abs_x // 100
                reverse_number_positive = int(str(a) + str(b) + str(c))
                reverse_number = -1 * reverse_number_positive   #正数转为负数
                return reverse_number

32位以内整数反转

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231, 231 − 1]。反转后整数溢出那么就返回 0。
对于位数较多的整数,如果像上述方法依次取出每位数字然后倒置排序,显然不可取。因此需要考虑一种在取数的同时便可以将数字倒置排序的方法。

cclass Solution:
    def reverse(self, x: int) -> int:
        reverse_number = 0
        if x >= 0:
            while x != 0:
                reverse_number = reverse_number * 10 + x % 10     #每一步中,通过x%10可得到原数字的最后一位数字,通过reverse_number*10可达到数字反转的目的
                x = x // 10    #每次通过x // 10 可达到略去最后一位的目的
        else:
            x = -x    #将负数变为正数处理
            while x !=0:
                reverse_number = reverse_number * 10 + x % 10
                x = x // 10
            reverse_number = -reverse_number     #再将正数转为负数
        if reverse_number < -1*2**31 or reverse_number > 2**31-1:   #超出规定值范围,将溢出,返回值为0
            return 0
        return reverse_number

学习过程中,欢迎指正。

你可能感兴趣的:(python)