題目:
將一個(gè)字符串轉(zhuǎn)換成一個(gè)整數(shù)尔破,要求不能使用字符串轉(zhuǎn)換整數(shù)的庫(kù)函數(shù)街图。 數(shù)值為0或者字符串不是一個(gè)合法的數(shù)值則返回0
輸入描述:
輸入一個(gè)字符串,包括數(shù)字字母符號(hào),可以為空
輸出描述:
如果是合法的數(shù)值表達(dá)則返回該數(shù)字浇衬,否則返回0
思路:
這道題本身不難,但是需要仔細(xì)考慮各個(gè)特殊情況餐济,正常情況下耘擂,遍歷字符串,首先判斷第一個(gè)是不是符號(hào)絮姆,如果是的話需要進(jìn)行flag的標(biāo)記醉冤,然后累加求得整數(shù)值,特殊情況如下:
1.只有一位篙悯,那么只能為數(shù)字蚁阳;
2.字符串為空;
3.字符串中出現(xiàn)了非法的字符鸽照。
此外為了分辨是字符0轉(zhuǎn)換成數(shù)字0螺捐,還是不合法返回0,需要一個(gè)類變量IsRight來(lái)進(jìn)行標(biāo)記分辨矮燎。
代碼實(shí)現(xiàn):
# -*- coding:utf-8 -*-
class Solution:
IsRight = 1 #類變量
def StrToInt(self, s):
# write code here
if not s:
IsRight = 0 #不合法為0
return 0
label = 1 #正負(fù)數(shù)標(biāo)志
sum = 0
nums = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
#特殊情況 只有一位
if len(s)==1:
if s[0] not in nums:
self.IsRight = 0
return 0
for i in range(len(s)):
if i == 0:
if s[i] == '+':
continue
elif s[i] == '-':
label = -1
continue
if s[i] in nums:
sum = sum*10 + nums.index(s[i]) #轉(zhuǎn)換成數(shù)字
else: #出現(xiàn)非法字符
sum = 0
self.IsRight = 0
break
result = sum*label #判斷是否超出邊界
if result > (2**32)-1 or result < -(2**32):
self.IsRight = 0
return 0
else:
return result
提交結(jié)果: