From 719566a12c91834a41ad28ff119ea8dbc62ff746 Mon Sep 17 00:00:00 2001 From: CyC2018 Date: Wed, 28 Oct 2026 13:45:08 +0800 Subject: [PATCH] =?UTF-8?q?Update=2067.=20=E6=8A=8A=E5=AD=97=E7=AC=A6?= =?UTF-8?q?=E4=B8=B2=E8=BD=AC=E6=8D=A2=E6=88=90=E6=95=B4=E6=95=B0.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 题目链接改为力扣中的对应题目,题目描述和代码按该题的接口调整。 --- notes/67. 把字符串转换成整数.md | 38 ++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/notes/67. 把字符串转换成整数.md b/notes/67. 把字符串转换成整数.md index 19fdd290..1841ca63 100644 --- a/notes/67. 把字符串转换成整数.md +++ b/notes/67. 把字符串转换成整数.md @@ -2,7 +2,7 @@ ## 题目链接 -[NowCoder](https://www.nowcoder.com/practice/1277c681251b4372bdef344468e4f26e?tpId=13&tqId=11202&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking&from=cyc_github) +[Leetcode](https://leetcode.cn/problems/ba-zi-fu-chuan-zhuan-huan-cheng-zheng-shu-lcof/) ## 题目描述 @@ -21,19 +21,33 @@ Output: ## 解题思路 ```java -public int StrToInt(String str) { +public int myAtoi(String str) { if (str == null || str.length() == 0) return 0; - boolean isNegative = str.charAt(0) == '-'; - int ret = 0; - for (int i = 0; i < str.length(); i++) { - char c = str.charAt(i); - if (i == 0 && (c == '+' || c == '-')) /* 符号判定 */ - continue; - if (c < '0' || c > '9') /* 非法输入 */ - return 0; - ret = ret * 10 + (c - '0'); + int i = 0, n = str.length(); + while (i < n && str.charAt(i) == ' ') { + i++; } - return isNegative ? -ret : ret; + if (i == n) + return 0; + int sign = 1; + char c = str.charAt(i); + if (c == '+' || c == '-') { + sign = c == '-' ? -1 : 1; + i++; + } + int ret = 0; + int border = Integer.MAX_VALUE / 10; + while (i < n) { + c = str.charAt(i); + if (c < '0' || c > '9') + break; + if (ret > border || (ret == border && c > '7')) { + return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE; + } + ret = ret * 10 + (c - '0'); + i++; + } + return sign * ret; } ```