1.题目
2.思路
模拟即可--O(N)
注意特殊情况,空格, + , - , 字母, 不是 0 - 9等等,多构造测试用例试试!
注意边界条件,最大的负整数和正整数 :-2^31, 2^31 - 1;
class Solution {
public int strToInt(String s) {
int n = s.length();
if(n == 0)return 0;
int i = 0 ;
while(i < n){
if(s.charAt(i) == ' ')
i++;
else
break;
}
if(i == n)return 0;
// System.out.println(i+">>>0");
if(!((s.charAt(i) - '0' >= 0 && s.charAt(i) - '0' <= 9) || s.charAt(i) == '-' || s.charAt(i) == '+')){
// System.out.println(i+">>>02");
return 0;
}
// System.out.println(i+">>>1");
int flag = 1;
if(s.charAt(i) == '-' || s.charAt(i) == '+'){
if(s.charAt(i) == '-')flag = - 1;
i++;
}
if(i == n) return 0;
int int_min = Integer.MIN_VALUE;
int int_max = Integer.MAX_VALUE;
long temp = 0;
int ans = 0;
while(i < n){
if(s.charAt(i) - '0' >= 0 && s.charAt(i) - '0' <= 9){
temp = temp * 10;
temp += s.charAt(i) - '0';
i++;
//负数
if(flag == -1){
if(-temp <= int_min) return int_min;
if(-temp >= int_max) return int_max;
}
else{
if(temp <= int_min) return int_min;
if(temp >= int_max) return int_max;
}
}
else
break;
}
ans = (int)temp * flag;
return ans;
}
}