每日一个有趣的python题
这个题目蛮好蛮有意思的 静下心来好好分析 但是我这个貌似很耗内存呢 有没有大佬指导一下好的且简单易懂的方法。return 0#意思是全是0了或者第一个就是非数字字符返回字符0。注意特殊情况 比如+后面仍然是非数字字符咋办 比如+后面没有任何字符是空的咋办 考虑代码健壮性。result1=s.lstrip('0')#丢掉左边的。s=s.lstrip()#丢弃左侧的指定字符。写出来倒是不难 就是要注意
请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数。
函数 myAtoi(string s) 的算法如下:
- 空格:读入字符串并丢弃无用的前导空格(
" ") - 符号:检查下一个字符(假设还未到字符末尾)为
'-'还是'+'。如果两者都不存在,则假定结果为正。 - 转换:通过跳过前置零来读取该整数,直到遇到非数字字符或到达字符串的结尾。如果没有读取数字,则结果为0。
- 舍入:如果整数数超过 32 位有符号整数范围
[−231, 231 − 1],需要截断这个整数,使其保持在这个范围内。具体来说,小于−231的整数应该被舍入为−231,大于231 − 1的整数应该被舍入为231 − 1。
返回整数作为最终结果。
注意特殊情况 比如+后面仍然是非数字字符咋办 比如+后面没有任何字符是空的咋办 考虑代码健壮性
写出来倒是不难 就是要注意lstrip的使用与字符串的更新
class Solution(object):
def myAtoi(self, s):
s=s.lstrip()#丢弃左侧的指定字符
if not s:
return 0
sign = s[0]
if sign=='+' or sign=='-':
s=s[1:]
if not s :
return 0
if not s[0].isdigit():
return 0
result1=s.lstrip('0')#丢掉左边的
result2=''
for i in result1:
if not i.isdigit():
break
result2+=i#这是得到了直到出现非数字字符之前的字符串
if not result2:
return 0#意思是全是0了或者第一个就是非数字字符返回字符0
if sign in '+-':
result2=sign+result2
result2=int(result2)
if result2 <-pow(2,31):
return -pow(2,31)
elif result2>pow(2,31)-1:
return pow(2,31)-1
else:
return result2
solution=Solution()
result=solution.myAtoi(" +")
print(result)
这个题目蛮好蛮有意思的 静下心来好好分析 但是我这个貌似很耗内存呢 有没有大佬指导一下好的且简单易懂的方法
更多推荐


所有评论(0)