首先去除掉首位空格,此时第一个字符有三种情况
- 首先是-或者+,此时往前进一位,当后面没有字符或者后面字符不是数字时,返回0。将后面的数字字符累加起来。累加过程中需要与Integer.MAX_VALUE或者Integer.MIN_VALUE比较;
- 后面字符是数字,将后面字符累加起来。累加过程中与Integer.MAX_VALUE比较。由于有可能爆int,所以用long存储累加结果;
- 其余情况,全部返回0。
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return int整型
*/
public int StrToInt (String s) {
// write code here
s = s.trim();
if(s.length() == 0) {
return 0;
}
int i = 0;
if(s.charAt(i) == '-' || s.charAt(i) == '+') {
boolean flag = false;
if(s.charAt(i) == '-') {
flag = true;
}
i++;
if(i == s.length()) {
return 0;
}
if(s.charAt(i) >= '0' && s.charAt(i) <= '9') {
long sum = 0;
int j = i;
while(j < s.length() && s.charAt(j) >= '0' && s.charAt(j) <= '9') {
sum = sum * 10 + (s.charAt(j) - '0');
if(flag) {
long x = -1 * sum;
if(x < Integer.MIN_VALUE) {
return Integer.MIN_VALUE;
}
} else {
if(sum > Integer.MAX_VALUE) {
return Integer.MAX_VALUE;
}
}
j++;
}
return flag ? -1 * (int)sum : (int)sum;
}
} else if(s.charAt(i) >= '0' && s.charAt(i) <= '9') {
long sum = 0;
int j = i;
while(j < s.length() && s.charAt(j) >= '0' && s.charAt(j) <= '9') {
sum = sum * 10 + (s.charAt(j) - '0');
if(sum > Integer.MAX_VALUE) {
return Integer.MAX_VALUE;
}
j++;
}
return (int)sum;
}
return 0;
}
}