问题描述
7. 整数反转 给你一个 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
class Solution(object):
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
num=0
# 取绝对值
a=abs(x)
while (a!=0):
temp=a%10
num=num*10+temp
a=int(a/10)
while -2147483648<num<2147483647:
if x < 0 :
num = 0 - num
return num
else:
return num
return 0
8.
请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。 读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。 将前面步骤读入的这些数字转换为整数(即,"123" -> 123, "0032" -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。 如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。 返回整数作为最终结果。 注意: 本题中的空白字符只包括空格字符 ' ' 。 除前导空格或数字后的其余字符串外,请勿忽略 任何其他字符。 示例 1: 输入:s = "42" 输出:42 解释:加粗的字符串为已经读入的字符,插入符号是当前读取的字符。 第 1 步:"42"(当前没有读入字符,因为没有前导空格) ^ 第 2 步:"42"(当前没有读入字符,因为这里不存在 '-' 或者 '+') ^ 第 3 步:"42"(读入 "42") ^ 解析得到整数 42 。 由于 "42" 在范围 [-231, 231 - 1] 内,最终结果为 42 。
class Solution(object):
def myAtoi(self, s):
"""
:type s: str
:rtype: int
"""
new_s=s.strip()
if (new_s==""or new_s=="-"or new_s=="+"):
return 0
# 从起点开始匹配 match lstrip 去除某个符号
s1=re.match('[^\d]+',(new_s.lstrip("-")).lstrip("+"))
if s1!=None:
return 0
else:
s1=re.search('\-*\+*\d+',new_s).group()
if s1[0:2]=="--"or s1[0:2]=="++" or s1[0:2]=="-+":
return 0
result=int(s1)
if result>0 :
return 2147483647 if result>2147483647 else result
else:
return -2147483647 if result<-2147483647 else result
此题可能网速够给力,优化后,时间上直接干掉了100% 还是很不错的,读者可以自行根据第七题,对这题进行求解,或许时空复杂度会耗费多点,但是有利于,对自己的编程能力提升
欢迎在评论区内留言