赞
踩
请你来实现一个 myAtoi(string s)
函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi
函数)。
函数 myAtoi(string s)
的算法如下:
0
。必要时更改符号(从步骤 2 开始)。[−231, 231 − 1]
,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231
的整数应该被固定为 −231
,大于 231 − 1
的整数应该被固定为 231 − 1
。注意:
' '
。示例 1:
输入:s = "42" 输出:42 解释:加粗的字符串为已经读入的字符,插入符号是当前读取的字符。 第 1 步:"42"(当前没有读入字符,因为没有前导空格) ^ 第 2 步:"42"(当前没有读入字符,因为这里不存在 '-' 或者 '+') ^ 第 3 步:"42"(读入 "42") ^ 解析得到整数 42 。 由于 "42" 在范围 [-231, 231 - 1] 内,最终结果为 42 。
示例 2:
输入:s = " -42" 输出:-42 解释: 第 1 步:" -42"(读入前导空格,但忽视掉) ^ 第 2 步:" -42"(读入 '-' 字符,所以结果应该是负数) ^ 第 3 步:" -42"(读入 "42") ^ 解析得到整数 -42 。 由于 "-42" 在范围 [-231, 231 - 1] 内,最终结果为 -42 。
示例 3:
输入:s = "4193 with words" 输出:4193 解释: 第 1 步:"4193 with words"(当前没有读入字符,因为没有前导空格) ^ 第 2 步:"4193 with words"(当前没有读入字符,因为这里不存在 '-' 或者 '+') ^ 第 3 步:"4193 with words"(读入 "4193";由于下一个字符不是一个数字,所以读入停止) ^ 解析得到整数 4193 。 由于 "4193" 在范围 [-231, 231 - 1] 内,最终结果为 4193 。
提示:
0 <= s.length <= 200
s
由英文字母(大写和小写)、数字(0-9
)、' '
、'+'
、'-'
和 '.'
组成按照题目的给的步骤执行
- class Solution {
- public int myAtoi(String str) {
- int len = str.length();
- char[] charArray = str.toCharArray();
- //去除前导空格
- int index = 0;
- while (index < len && charArray[index] == ' ') {
- index++;
- }
- //为空直接返回
- if (index == len) {
- return 0;
- }
- //获得正负号
- int sign = 1;
- char first = charArray[index];
- if (first == '+') {
- index++;
- } else if (first == '-') {
- index++;
- sign = -1;
- }
-
- int res = 0;
- while (index < len) {
- char current = charArray[index];
- //如果不是数字之间跳过
- if (current > '9' || current < '0') {
- break;
- }
- //判断溢出
- if (res > Integer.MAX_VALUE / 10 || (res == Integer.MAX_VALUE / 10 && (current - '0') > Integer.MAX_VALUE % 10)) {
- return Integer.MAX_VALUE;
- }
- if (res < Integer.MIN_VALUE / 10 || (res == Integer.MIN_VALUE / 10 && (current - '0') > -(Integer.MIN_VALUE % 10))) {
- return Integer.MIN_VALUE;
- }
- res = res * 10 + sign * (current - '0');
- index++;
- }
- return res;
- }
-
- }
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。