思考:本题的难点体现在对各种情况能否全部覆盖,已经对细节的把握上。
可能出现的各种特殊情况:
1.null or empty input
2.+& -
3.white space
4.max and min of integer
public class atoi { public int luoAtoi(String str){ if(str==null){ return 0; } str = str.trim(); if(str.length()==0){ return 0; } long result = 0; int flag = 1; //标记正负 int i = 0; //索引 if(str.charAt(i) == '+'){ i++; } else if(str.charAt(i) == '-'){ i++; flag = -1; } for(;i<str.length();i++){ if((str.charAt(i)<'0')||(str.charAt(i)>'9')){ break; } else{ result = result*10 + (str.charAt(i) - '0'); } if(result>Integer.MAX_VALUE){ break; } } result = result*flag; if(result >= Integer.MAX_VALUE){ return Integer.MAX_VALUE; } if(result <= Integer.MIN_VALUE){ return Integer.MIN_VALUE; } return (int)result; }}细节点:1.返回的result变量需要是long型,满足String的值可能已经大于Integer的最大值,不然就会取负。2.char类型相减:因为char类型实际上是ASCII码对应的整数,所以取与'0'的差与10进制整数符合。3.一旦result大于Integer最大值,需要跳出循环,不然可能导致String的值大于long型的最大值。4.最后记得把result强转为int型
新闻热点
疑难解答