Problem: 8. 字符串转换整数 (atoi)
思路
- 看到题目首先会想到将字符串强制转换为int型
- 观察测试案例,发现案例中包括非数字字符
- 将非数字字符与数字字符分离
- 对分离出来的数字字符强制类型转换
解题方法
- 对字符串进行预处理,去除首尾的空格
- 设定一个旗帜来标记正负数
- 进行二次处理,识别开头的政府符号,并对旗帜进行赋值
- 处理后的字符,去除首部无意义的"0"字符
- 再对经过以上处理获得的字符串,进行逐个判断,分为三种情况:开头直接为非数字字符的;中间有非数字字符的;没有非数字字符的,并对三种情况进行分别标记
- 标记后对字符串进行循环遍历,遇到非数字字符则记录索引,并停止遍历
截取非数字字符之前的字符串- 对截取下的字符串进行大小判断,判断是否超出限度
- 超出限度则直接赋值为最大值或最小值,并进行最后的强制类型转换
Code
class Solution {
public int myAtoi(String s) {
int index = 0;
int biaoji = 0;
int flag = 0;
long a = 0;
String str = s.trim();
if (str.startsWith("+")) {
flag = 0;
str = str.substring(1);
if (str.startsWith("0")) {
while(true){
if (str.startsWith("0")){
str = str.substring(1);
}else{
break;
}
}
}
}else if(str.startsWith("-")){
flag = 1;
str = str.substring(1);
if (str.startsWith("0")) {
while(true){
if (str.startsWith("0")){
str = str.substring(1);
}else{
break;
}
}
}
}else {
if (str.startsWith("0")) {
while(true){
if (str.startsWith("0")){
str = str.substring(1);
}else{
break;
}
}
}
}
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) <= '9' && str.charAt(i) >= '0') {
biaoji = 1;//正常
index = i;
System.out.println("index:" + index);
System.out.println("对应的字符:" + str.charAt(index));
} else {
if (i == 0) {
biaoji = -1;//开头直接是字符的情况
break;
} else {
biaoji = 0;//中间有字符
index = i;
break;
}
}
}
if (biaoji == -1) {
a = 0;
} else if (biaoji == 1) {
System.out.println("传进的:" + str);
String end = str.substring(0, index + 1);
if(end.length()>10){
a = 2147483647;
if(flag == 1){
a= -2147483648;
}
}else{
a = Long.parseLong(end);
if(flag == 1){
if(a>2147483647){
a = -2147483648;
}
else {
a = -a;
}
}else {
if(a>2147483647){
a=2147483647;
}
}
}
} else if (biaoji == 0) {
if (str.isEmpty()) {
return 0;
}
System.out.println("传进的0:" + str + "----");
System.out.println(str.substring(0, index )+"-----");
String end = str.substring(0, index );
System.out.println(end);
if(end.length()>10){
a = 2147483647;
if(flag == 1){
a= -2147483648;
}
}else{
a = Long.parseLong(end);
if(flag == 1){
if(a>2147483647){
a = -2147483648;
}
else {
a = -a;
}
}else {
if(a>2147483647){
a=2147483647;
}
}
}
}
return (int)a;
}
}