1.首先想到的是用栈,先进后出。思路就是先将数值取绝对值,然后入栈,在出栈的时候去掉顶部的0,然后计算出栈的各个数据组成的结果。
import math
class Stack(object):
# 初始化栈为空列表
def __init__(self):
self.items = []
# 判断栈是否为空,返回布尔值
def is_empty(self):
return self.items == []
# 返回栈顶元素
def peek(self):
return self.items[len(self.items) - 1]
# 返回栈的大小
def size(self):
return len(self.items)
# 把新的元素堆进栈里面(程序员喜欢把这个过程叫做压栈,入栈,进栈……)
def push(self, item):
self.items.append(item)
# 把栈顶元素丢出去(程序员喜欢把这个过程叫做出栈……)
def pop(self):
return self.items.pop()
class Solution:
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
s = Stack()
result_list = []
result=0
#求绝对值,便于转换,抓换后再判断x是否为负
abs_x = int(math.fabs(x))
#转换为字符串
str_x = str(abs_x)
len_abs_str = len(str_x)
#将字符串的各个字符入栈
for i in range(len_abs_str):
s.push(str_x[i])
#flag用来去掉x最末尾的0
flag = True
#出栈
for i in range(len_abs_str):
temp = s.pop()
if temp == 0 and flag == True:
break
if temp != 0:
flag = False
result_list.append(temp)
#计算result
for i in range(len(result_list)):
result+=int(result_list[i])*10**(len(result_list)-i-1)
if x<0:
result=-result
if result > 2 ** 31 - 1 or result < -2 ** 31:
result=0
return result
2.直接将出栈的数据(无需考虑去除头部的0)拼接成字符串,然后转int即可,这个过程会自动去掉头部的0。
class Solution:
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
s = Stack()
result_list = []
result=0
abs_x = int(math.fabs(x))
str_x = str(abs_x)
len_abs_str = len(str_x)
for i in range(len_abs_str):
s.push(str_x[i])
for i in range(len_abs_str):
temp = s.pop()
result_list.append(temp)
temp_str=""
for i in range(len(result_list)):
#拼接字符串
temp_str=temp_str+result_list[i]
#字符串转int
result=int(temp_str)
if x<0:
result=-result
if result > 2 ** 31 - 1 or result < -2 ** 31:
result=0
return result
3.不使用栈,int类型的数据长度不超过10位数,所以遍历也不会很复杂
class Solution:
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
result_list = []
temp_list=[]
result=0
abs_x = int(math.fabs(x))
str_x = str(abs_x)
len_abs_str = len(str_x)
for i in range(len_abs_str):
temp_list.append(str_x[i])
for i in range(len_abs_str-1,-1,-1):
result_list.append(temp_list[i])
temp_str=""
for i in range(len(result_list)):
temp_str=temp_str+result_list[i]
result=int(temp_str)
if x<0:
result=-result
if result > 2 ** 31 - 1 or result < -2 ** 31:
result=0
return result