LeetCode7-整数反转

题目描述

给你一个 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# !/usr/bin/python3
# -*- coding: utf-8 -*-

class Solution:
def reverse(self, x: int) -> int:
num_str = str(x)
stack = []
sign = ""
for index in range(len(num_str)):
char = num_str[index]
if (char == "-"):
sign = char
else:
stack.append(num_str[index])
if (len(sign) > 0):
stack.append(sign)

num_str = ""
for index in range(len(stack)):
char = stack.pop()
num_str += char

num = int(num_str)
if (num > 2**31 - 1 or num < -2**31):
return 0
else:
return num