【求知=>算法】整数反转

172 阅读1分钟

【求知=>算法】整数反转

给你一个 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

解题思路


  1. 数组切片

  • 将整数转成字符串类型定义为s。
  • 如果零号下标等于负一,输出新的字符串负一加反转后的字符串,反正直接输出反转的字符串。
  • 将字符串转成整型,然后根据提示 -2**31 <= x <= 2**31 - 1,进行输出,反正返回0。
# 转换成string后翻转string再转化回来。str对int转化,和str切片都是O(n)。
def reverse():
    x = -123
    s = str(x)
    if s[0] == '-':
        s_rev = s[0] + s[-1:-len(s):-1]
    else:
        s_rev = s[::-1]
    x_rev = int(s_rev)
    if -2 ** 31 <= x_rev <= 2 ** 31 - 1:
        return x_rev
    return 0
  1. 双指针思路

  • 将整型转换成集合类型并定义为s。
  • 然后判断是否第一个输出是否是负一,如果是负一,总长度减去一并且整除遍历,重新复值开始值和结束值,反之判断第一个输出不是负一,总长度整除遍历,重新复值开始值和结束值。
  • 将字符串转成整型,然后根据提示 -2**31 <= x <= 2**31 - 1,进行输出,反正返回0。
x = -123
t = list(str(x))  # 数字转换成字符串
n = len(t)
left = n - 1
right = 1
right2 = 0
if t[0] == '-':
    for i in range((n - 1) // 2):
        t[right], t[left] = t[left], t[right]
        right += 1
        left -= 1
    tt = int(''.join(t))
    if tt <= (2 ** 31 - 1) and tt >= (-2 ** 31):
        return tt
    else:
        return 0
else:
    if n == 1:
        return x
    else:
        for j in range(n // 2):
            t[right2], t[left] = t[left], t[right2]
            right2 += 1
            left -= 1
        tt = int(''.join(t))
        if tt <= (2 ** 31 - 1) and tt >= (-2 ** 31):
            return tt
        else:

知识扩展


join()方法的使用

博客来源:雨夜的博客