-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path0008.py
75 lines (67 loc) · 2.73 KB
/
0008.py
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
64
65
66
67
68
69
70
71
72
73
74
75
# Source: https://leetcode.com/problems/string-to-integer-atoi
# Title: String to Integer (atoi)
# Difficulty: Medium
# Author: Mu Yang <http://muyang.pro>
################################################################################################################################
# Implement atoi which converts a string to an integer.
#
# The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. Then, starting from this character, takes an optional initial plus or minus sign followed by as many numerical digits as possible, and interprets them as a numerical value.
#
# The string can contain additional characters after those that form the integral number, which are ignored and have no effect on the behavior of this function.
#
# If the first sequence of non-whitespace characters in str is not a valid integral number, or if no such sequence exists because either str is empty or it contains only whitespace characters, no conversion is performed.
#
# If no valid conversion could be performed, a zero value is returned.
#
# Note:
#
# Only the space character ' ' is considered as whitespace character.
# Assume we are dealing with an environment which could only store integers within the 32-bit signed integer range: [−2^31, 2^31 − 1]. If the numerical value is out of the range of representable values, INT_MAX (2^31 − 1) or INT_MIN (−2^31) is returned.
#
# Example 1:
#
# Input: "42"
# Output: 42
#
# Example 2:
#
# Input: " -42"
# Output: -42
# Explanation: The first non-whitespace character is '-', which is the minus sign.
# Then take as many numerical digits as possible, which gets 42.
#
# Example 3:
#
# Input: "4193 with words"
# Output: 4193
# Explanation: Conversion stops at digit '3' as the next character is not a numerical digit.
#
# Example 4:
#
# Input: "words and 987"
# Output: 0
# Explanation: The first non-whitespace character is 'w', which is not a numerical
# digit or a +/- sign. Therefore no valid conversion could be performed.
#
# Example 5:
#
# Input: "-91283472332"
# Output: -2147483648
# Explanation: The number "-91283472332" is out of the range of a 32-bit signed integer.
# Thefore INT_MIN (−2^31) is returned.
#
################################################################################################################################
import re
INT_MAX = 2**31-1
INT_MIN = -2**31
class Solution:
def myAtoi(self, s: str) -> int:
m = re.findall(r'^[+\-]?\d+', s.lstrip())
if not m:
return 0
ans = int(m[0])
if ans > INT_MAX:
ans = INT_MAX
elif ans < INT_MIN:
ans = INT_MIN
return ans