From 48c031f9a522039beead3e2beb6218e8b30fbda6 Mon Sep 17 00:00:00 2001 From: wyl <959814898@qq.com> Date: Mon, 24 Jun 2024 19:19:10 +0800 Subject: [PATCH] =?UTF-8?q?leetcode=208.=20=E5=AD=97=E7=AC=A6=E4=B8=B2?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2=E6=95=B4=E6=95=B0=20(atoi)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/wyl/leetcode/MyAtoi.java | 120 ++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 leetcode/src/main/java/com/wyl/leetcode/MyAtoi.java diff --git a/leetcode/src/main/java/com/wyl/leetcode/MyAtoi.java b/leetcode/src/main/java/com/wyl/leetcode/MyAtoi.java new file mode 100644 index 0000000..f178ba7 --- /dev/null +++ b/leetcode/src/main/java/com/wyl/leetcode/MyAtoi.java @@ -0,0 +1,120 @@ +package com.wyl.leetcode; + +/** + * 8.请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数。 + *

+ * 函数 myAtoi(string s) 的算法如下: + *

+ * 空格:读入字符串并丢弃无用的前导空格(" ") + * 符号:检查下一个字符(假设还未到字符末尾)为 '-' 还是 '+'。如果两者都不存在,则假定结果为正。 + * 转换:通过跳过前置零来读取该整数,直到遇到非数字字符或到达字符串的结尾。如果没有读取数字,则结果为0。 + * 舍入:如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被舍入为 −231 ,大于 231 − 1 的整数应该被舍入为 231 − 1 。 + * 返回整数作为最终结果。 + *

+ *

+ *

+ * 示例 1: + *

+ * 输入:s = "42" + *

+ * 输出:42 + *

+ * 解释:加粗的字符串为已经读入的字符,插入符号是当前读取的字符。 + *

+ * 带下划线线的字符是所读的内容,插入符号是当前读入位置。 + * 第 1 步:"42"(当前没有读入字符,因为没有前导空格) + * ^ + * 第 2 步:"42"(当前没有读入字符,因为这里不存在 '-' 或者 '+') + * ^ + * 第 3 步:"42"(读入 "42") + * ^ + * 示例 2: + *

+ * 输入:s = " -042" + *

+ * 输出:-42 + *

+ * 解释: + *

+ * 第 1 步:" -042"(读入前导空格,但忽视掉) + * ^ + * 第 2 步:" -042"(读入 '-' 字符,所以结果应该是负数) + * ^ + * 第 3 步:" -042"(读入 "042",在结果中忽略前导零) + * ^ + * 示例 3: + *

+ * 输入:s = "1337c0d3" + *

+ * 输出:1337 + *

+ * 解释: + *

+ * 第 1 步:"1337c0d3"(当前没有读入字符,因为没有前导空格) + * ^ + * 第 2 步:"1337c0d3"(当前没有读入字符,因为这里不存在 '-' 或者 '+') + * ^ + * 第 3 步:"1337c0d3"(读入 "1337";由于下一个字符不是一个数字,所以读入停止) + * ^ + * 示例 4: + *

+ * 输入:s = "0-1" + *

+ * 输出:0 + *

+ * 解释: + *

+ * 第 1 步:"0-1" (当前没有读入字符,因为没有前导空格) + * ^ + * 第 2 步:"0-1" (当前没有读入字符,因为这里不存在 '-' 或者 '+') + * ^ + * 第 3 步:"0-1" (读入 "0";由于下一个字符不是一个数字,所以读入停止) + * ^ + * 示例 5: + *

+ * 输入:s = "words and 987" + *

+ * 输出:0 + *

+ * 解释: + *

+ * 读取在第一个非数字字符“w”处停止。 + */ +public class MyAtoi { + public static int myAtoi(String s) { + int res = 0; + boolean flag = true; + boolean is = true; + char[] chars = s.toCharArray(); + for (int i = 0; i < chars.length; i++) { + if ((chars[i] >= '0') && (chars[i] <= '9')) { + int tmp = chars[i] - 48; + if (!flag) { + if (-res < -214748364 || (-res == -214748364 && -tmp < -8)) { + return -2147483648; + } + } else { + if (res > 214748364 || (res == 214748364 && tmp > 7)) { + return 2147483647; + } + } + res = 10 * res + (chars[i] - 48); + is = false; + } else if (is && chars[i] == '-') { + flag = false; + is = false; + } else if (is && chars[i] == ' ') { + } else if (is && chars[i] == '+') { + is = false; + } else { + break; + } + + } + return flag ? res : -res; + } + + public static void main(String[] args) { + System.out.println(myAtoi("-2147483649")); + } +}