File tree Expand file tree Collapse file tree 2 files changed +94
-1
lines changed
0008.String to Integer (atoi) Expand file tree Collapse file tree 2 files changed +94
-1
lines changed Original file line number Diff line number Diff line change 28
28
### 解法
29
29
- 解法1
30
30
31
- 用 long 型存储该整数,取绝对值,然后转成 StringBuilder 进行 reverse,后转回 int。注意判断该数是否在[ Integer.MIN_VALUE, Intger .MAX_VALUE] 范围内。
31
+ 用 long 型存储该整数,取绝对值,然后转成 StringBuilder 进行 reverse,后转回 int。注意判断该数是否在 ` [Integer.MIN_VALUE, Integer .MAX_VALUE] ` 范围内。
32
32
33
33
``` java
34
34
class Solution {
Original file line number Diff line number Diff line change
1
+ ## 8. 字符串转换整数 (atoi)
2
+ ### 题目描述
3
+ 请你来实现一个 ` atoi ` 函数,使其能将字符串转换成整数。
4
+
5
+ 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。
6
+
7
+ 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
8
+
9
+ 该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。
10
+
11
+ 注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。
12
+
13
+ 在任何情况下,若函数不能进行有效的转换时,请返回 0。
14
+
15
+ ** 说明:**
16
+
17
+ 假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 ` [−231, 231 − 1] ` 。如果数值超过这个范围,请返回 ` INT_MAX (2^31 − 1) ` 或 ` INT_MIN (−2^31) ` 。
18
+
19
+ ** 示例 1:**
20
+
21
+ ```
22
+ 输入: "42"
23
+ 输出: 42
24
+ ```
25
+
26
+ ** 示例 2:**
27
+
28
+ ```
29
+ 输入: " -42"
30
+ 输出: -42
31
+ 解释: 第一个非空白字符为 '-', 它是一个负号。
32
+ 我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。
33
+ ```
34
+
35
+ ** 示例 3:**
36
+
37
+ ```
38
+ 输入: "4193 with words"
39
+ 输出: 4193
40
+ 解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。
41
+ ```
42
+
43
+ ** 示例 4:**
44
+
45
+ ```
46
+ 输入: "words and 987"
47
+ 输出: 0
48
+ 解释: 第一个非空字符是 'w', 但它不是数字或正、负号。
49
+ 因此无法执行有效的转换。
50
+ ```
51
+
52
+ ** 示例 5:**
53
+
54
+ ```
55
+ 输入: "-91283472332"
56
+ 输出: -2147483648
57
+ 解释: 数字 "-91283472332" 超过 32 位有符号整数范围。
58
+ 因此返回 INT_MIN (−231) 。
59
+ ```
60
+
61
+ ### 解法
62
+ ``` java
63
+ class Solution {
64
+ public int myAtoi (String str ) {
65
+ int len = str. length();
66
+ if (len == 0 ) return 0 ;
67
+ char [] cs = str. toCharArray();
68
+ int i = 0 ;
69
+ while (i < len && cs[i] == ' ' ) i++ ;
70
+ if (i== len) return 0 ;
71
+ char c1 = cs[i];
72
+ int sig = 1 ;
73
+ if ((c1 > ' 9' || c1 < ' 0' )) {
74
+ if (c1 == ' -' ) {
75
+ sig = - 1 ;
76
+ i++ ;
77
+ } else if (c1 == ' +' ) {
78
+ i++ ;
79
+ } else return 0 ;
80
+ }
81
+ long v = 0 ,sv = 0 ;
82
+ for (; i < len; i++ ) {
83
+ char c = cs[i];
84
+ if (c < ' 0' || c > ' 9' ) break ;
85
+ v = v * 10 + (c - ' 0' );
86
+ sv = v * sig;
87
+ if (sv > Integer . MAX_VALUE ) return Integer . MAX_VALUE ;
88
+ else if (sv < Integer . MIN_VALUE ) return Integer . MIN_VALUE ;
89
+ }
90
+ return (int ) sv;
91
+ }
92
+ }
93
+ ```
You can’t perform that action at this time.
0 commit comments