字符串转换整数
请你来实现一个 atoi
函数,使其能将字符串转换成整数。
提示:本题中的空白字符只包括空格字符 ’ ’ 。
假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
示例:
1 2 3 4
| 输入: " -42" 输出: -42 解释: 第一个非空白字符为 '-', 它是一个负号。 我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。
|
1 2 3
| 输入: "4193 with words" 输出: 4193 解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。
|
1 2 3 4
| 输入: "words and 987" 输出: 0 解释: 第一个非空字符是 'w', 但它不是数字或正、负号。 因此无法执行有效的转换。
|
1 2 3 4
| 输入: "-91283472332" 输出: -2147483648 解释: 数字 "-91283472332" 超过 32 位有符号整数范围。 因此返回 INT_MIN (−231) 。
|
代码实现
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
| public solution{ public int myAtoi(String s){ char[] chars=s.toCharArray(); int len=chars.length; int idx=0; while(idx<len&&char[idx]==' '){ idx++; } if(idx==len) return 0; boolean negative=false; if(char[idx]=='-'){ negative=true; idx++; }else if(char[idx]=='+'){ idx++; }else if(!Character.isDigit(char[idx])){ return 0; } int ans=0; while(idx<len&&Character.isDigit(char[idx])){ int digit=char[idx]-'0'; if(ans>(Integer.MAX_VALUE-digit)/10){ return negative? Integer.MIN_VALUE : Integer.MAX_VALUE; } ans=ans*10+digit; idx++; } return negative? -ans:ans; } }
|