题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
思路:思路其实很简单清晰
1、判断是否存在+-号,存在就标记下
2、正常按顺序存取
3、判断边界Integer.MAX_VALUE与Integer.MIN_VALUE
import java.util.*;
public class Solution {
public int StrToInt(String str) {
if (str == null || str.length() == 0)return 0;
int result = 0, index = 0;
boolean isNevative = false;
if (str.charAt(0) == '+') {
index++;
} else if (str.charAt(0) == '-') {
isNevative = true;
index++;
}
while (index < str.length()) {
int digit = str.charAt(index++)-'0';
if(digit<0||digit>9)return 0;
if(isNevative){
// *10的操作就是为了进位
// Integer.MIN_VALUE%10其实就是-8
if(result<Integer.MIN_VALUE/10||(result==Integer.MIN_VALUE/10&&-digit<Integer.MIN_VALUE%10))return 0;
result = result*10-digit;
}else{
// Integer.MAX_VALUE%10其实就是7
if(result>Integer.MAX_VALUE/10||(result==Integer.MAX_VALUE/10&&digit>Integer.MAX_VALUE%10)) return 0;
result = result*10+digit;
}
}
return result;
}
}
时间复杂度:O(n)
空间复杂度:O(1)
练习地址:https://www.nowcoder.com/practice/1277c681251b4372bdef344468e4f26e