解题思路
法一:就是纯条件判断解法
法二:正则表达式匹配,用findall或者match
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| class Solution: def strToInt(self, str: str) -> int: start = 0 end = 0 result = '' symbol = '' max_ = 1<<31-1 min_ = 1>>31 includezero = True firstblank = 0 str = str.strip() if str == '': return 0 if str[0] == '+': symbol = 'plus' start += 1 end += 1 elif str[0] == '-': symbol = 'minus' start += 1 end += 1 elif ord(str[0]) < 48 or ord(str[0]) > 57: return 0 for i in range(start,len(str)): if ord(str[i])== 48 and includezero: continue if ord(str[i]) >= 48 and ord(str[i]) <= 57: includezero = False result += str[i] end += 1 else: break result = int(result) if result != '' else 0 if symbol == 'plus' and result > (1<<31)-1: return (1<<31)-1 elif symbol == 'plus': return result if symbol == 'minus' and result*-1 < -(1<<31): return -(1<<31) elif symbol == 'minus': return result*-1 if symbol == '': if result < -(1<<31): return -(1<<31) if result > (1<<31)-1: return (1<<31)-1 return result
import re max_ = (1<<31)-1 min_ = -(1<<31) try: result = int(re.match('[\+\-]?\d+',str.strip()).group(0)) except: return 0 return max(min(result,max_),min_)
|