每天一道leetecode:6、字符串转换整数(atoi)(medium)
程序员文章站
2022-07-14 07:57:42
...
为什么略去了4、5题呢,真的是血崩!!!!
第四题动态规划。。。。。。。。
第五题找规律。。。。。。。。。
动态规划真不是我现在有时间去看的,找规律也没啥意义呀,算了算了,今天手写了贝叶斯也算是对算法的练习了,今天就做一道简单的medium题吧。。。哭哭
'''
1、丢弃开头空格
2、负号问题
3、无用字符忽略
4、整体无效不转换,输出0
'''
def myAtoi(str):
is_null = 0
is_lower = 0
is_begin = 0
s = ''
for i in range(len(str)):
# 如果遇到了空格
if str[i] == ' ':
# 如果开始了
if is_begin != 0:
if s == '-' or s == '':
return 0
else:
return s
# 如果没开始
if is_begin == 0:
#print('aaa')
continue
# 如果遇到了不是数字的字符
if ord(str[i])-48 > 9 or ord(str[i])-48 < 0:
#print('bbb')
# 如果遇到的是负号
if str[i] == '-':
# 如果还没开始
if is_begin == 0:
# 记录是负号
is_lower = 1
# 开始了
is_begin = 1
s = s + str[i]
# 如果开始了
elif is_begin != 0:
if s == '-' or s == '':
return 0
else:
return s
# 如果遇到的不是负号
if str[i] != '-':
if s == '-' or s== '':
return 0
else:
return s
# 如果遇到了是数字的字符
if ord(str[i])-48 >= 0 and ord(str[i])-48 <= 9:
s = s + str[i]
#print('s:',s)
len_s = len(s)
if len_s == 0:
return 0
y = 0
if s[0] == '-':
global num
num = 0
for i in range(len_s - 1):
k = len_s - i - 1
p = i
l = 1
while p != 0:
p = p - 1
l = l * 10
y += (ord(s[k]) - 48) * l
num = -1*y
else:
for i in range(len_s):
k = len_s - i - 1
p = i
l = 1
while p != 0:
p = p - 1
l = l * 10
y += (ord(s[k]) - 48) * l
num = y
if (num < -2147483648):
return -2147483648
elif (num > 2147483647):
return 2147483647
return num
print(myAtoi('42'))
print(myAtoi(' -42'))
print(myAtoi('4193 with words'))
print(myAtoi('words and 987'))
print(myAtoi('-91283472332'))
print(myAtoi('""'))
哈哈哈哈,照抄就错了,应该是编译器的问题,我的最后一个案例输出是0,可是leetecode输出竟然是3!!!
惊了!!!
懒得改了,如果有哪位大神知道怎么改,留言给小弟说一下好啦,小弟再ac了它,哈哈哈。
话说leetecode不能使用自定义函数吗?!!!!
一开始的代码感觉写的还不错呀。
'''
1、丢弃开头空格
2、负号问题
3、无用字符忽略
4、整体无效不转换,输出0
'''
def myAtoi(str):
is_null = 0
is_lower = 0
is_begin = 0
s = ''
for i in range(len(str)):
# 如果遇到了空格
if str[i] == ' ':
# 如果开始了
if is_begin != 0:
if s == '-' or s == '':
return 0
else:
return s
# 如果没开始
if is_begin == 0:
#print('aaa')
continue
# 如果遇到了不是数字的字符
if ord(str[i])-48 > 9 or ord(str[i])-48 < 0:
#print('bbb')
# 如果遇到的是负号
if str[i] == '-':
# 如果还没开始
if is_begin == 0:
# 记录是负号
is_lower = 1
# 开始了
is_begin = 1
s = s + str[i]
# 如果开始了
elif is_begin != 0:
if s == '-' or s == '':
return 0
else:
return s
# 如果遇到的不是负号
if str[i] != '-':
if s == '-' or s== '':
return 0
else:
return s
# 如果遇到了是数字的字符
if ord(str[i])-48 >= 0 and ord(str[i])-48 <= 9:
s = s + str[i]
#print('s:',s)
num = str_to_int(s)
if (num < -2147483648):
return -2147483648
elif (num > 2147483647):
return 2147483647
return num
def str_to_int(s):
len_s = len(s)
if len_s == 0:
return 0
y = 0
if s[0] == '-':
for i in range(len_s - 1):
k = len_s - i - 1
p = i
l = 1
while p!=0:
p = p-1
l = l * 10
y += (ord(s[k])-48)*l
return -1*y
else:
for i in range(len_s):
k = len_s - i - 1
p = i
l = 1
while p!=0:
p = p-1
l = l * 10
y += (ord(s[k])-48)*l
return y
print(myAtoi('42'))
print(myAtoi(' -42'))
print(myAtoi('4193 with words'))
print(myAtoi('words and 987'))
print(myAtoi('-91283472332'))
好啦,今天就到这里了,祝大家。额。今天不是什么节日,还是祝大家身体健康,万事如意啦!