1. # 请你来实现一个 atoi 函数,使其能将字符串转换成整数。
    2. #
    3. # 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:
    4. #
    5. #
    6. # 如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。
    7. # 假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。
    8. # 该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。
    9. #
    10. #
    11. # 注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。
    12. #
    13. # 在任何情况下,若函数不能进行有效的转换时,请返回 0 。
    14. #
    15. # 提示:
    16. #
    17. #
    18. # 本题中的空白字符只包括空格字符 ' ' 。
    19. # 假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 INT_MAX (231
    20. # − 1) 或 INT_MIN (−231) 。
    21. #
    22. #
    23. #
    24. #
    25. # 示例 1:
    26. #
    27. # 输入: "42"
    28. # 输出: 42
    29. #
    30. #
    31. # 示例 2:
    32. #
    33. # 输入: " -42"
    34. # 输出: -42
    35. # 解释: 第一个非空白字符为 '-', 它是一个负号。
    36. # 我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。
    37. #
    38. #
    39. # 示例 3:
    40. #
    41. # 输入: "4193 with words"
    42. # 输出: 4193
    43. # 解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。
    44. #
    45. #
    46. # 示例 4:
    47. #
    48. # 输入: "words and 987"
    49. # 输出: 0
    50. # 解释: 第一个非空字符是 'w', 但它不是数字或正、负号。
    51. # 因此无法执行有效的转换。
    52. #
    53. # 示例 5:
    54. #
    55. # 输入: "-91283472332"
    56. # 输出: -2147483648
    57. # 解释: 数字 "-91283472332" 超过 32 位有符号整数范围。
    58. # 因此返回 INT_MIN (−231) 。
    59. #
    60. # Related Topics 数学 字符串
    61. # 👍 794 👎 0
    62. # leetcode submit region begin(Prohibit modification and deletion)
    63. class Solution(object):
    64. def myAtoi(self, str: str) -> int:
    65. """
    66. :type str: str
    67. :rtype: int
    68. """
    69. str = str.strip()
    70. p = 1
    71. # 处理负数
    72. if str.startswith('-'):
    73. p = -1
    74. str = str[1:]
    75. elif str.startswith('+'):
    76. str = str[1:]
    77. # 长度等于0 或者第一个字符不对
    78. if len(str) <= 0 or not str[0].isdigit():
    79. return 0
    80. # 获取截止字符串
    81. endIndex = 0
    82. for i, v in enumerate(str):
    83. if not v.isdigit():
    84. break
    85. endIndex = i
    86. res = str[0:endIndex + 1]
    87. res = p * int(res)
    88. if res <= -2 ** 31:
    89. return -2 ** 31
    90. elif res >= 2 ** 31 - 1:
    91. return 2 ** 31 - 1
    92. else:
    93. return res
    94. # leetcode submit region end(Prohibit modification and deletion)A
    95. s = Solution()
    96. print(s.myAtoi(" -A42 "))
    97. print(s.myAtoi("3.14"))
    98. print(s.myAtoi("314"))
    99. print(s.myAtoi("-"))