題目:
將一個字符串轉(zhuǎn)換成一個整數(shù),要求不能使用字符串轉(zhuǎn)換整數(shù)的庫函數(shù)。 數(shù)值為0或者字符串不是一個合法的數(shù)值則返回0
輸入描述:
輸入一個字符串,包括數(shù)字字母符號,可以為空
輸出描述:
如果是合法的數(shù)值表達則返回該數(shù)字,否則返回0
思路:
這道題本身不難,但是需要仔細考慮各個特殊情況,正常情況下,遍歷字符串,首先判斷第一個是不是符號,如果是的話需要進行flag的標記,然后累加求得整數(shù)值,特殊情況如下:
1.只有一位,那么只能為數(shù)字;
2.字符串為空;
3.字符串中出現(xiàn)了非法的字符。
此外為了分辨是字符0轉(zhuǎn)換成數(shù)字0,還是不合法返回0,需要一個類變量IsRight來進行標記分辨。
代碼實現(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 #正負數(shù)標志
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
提交結果:
