今天的题目是将一个可能含有integer的string转化成integer,但有一些条件:无视空格,如果第一位不是+/-或者数字的话,就返回0,还有就是当值超过integerMaxValue或者integerMinValue的时候返回integer的最大值或者integer的最小值。
这道题的思路算法并不难,首先无视空格,直接trim()就好,然后第一位不是+/-这些也都不难,设一堆if条件一个一个过就好,但这题难得地方在于,他testcase的值竟然有超过long的,也就是说我不能直接比较我得到的integer和integer的最大值,因为我得到的integer会超过long,我debug了大半天,结果发现竟然是这个问题,真的气到吐血。。。看到这题踩的数量是赞的6倍就能看出来。一般也不会用到大于2^31的数吧-.-
附上代码:
class Solution { public int myAtoi(String s) { s = s.trim(); int sign = 1; long result = 0; int first = 0; if (s.length() == 0){ return 0; } if (s.charAt(0) == '-'){ sign = -1; first = 1; } else if (s.charAt(0) == '+'){ sign = 1; first = 1; } for (int i = first; i < s.length(); i++) { if (!Character.isDigit(s.charAt(i))){ return (int) (result * sign); } result = result * 10 + s.charAt(i) -'0'; } if((sign == 1) && (result > Integer.MAX_VALUE)){ System.out.println(result); return Integer.MAX_VALUE; } if((sign == -1) && ((-1 * result) < Integer.MIN_VALUE)){ return Integer.MIN_VALUE; } return (int) (sign * result); } }今天真的是糟透的一天,考试的时候出了兼容问题,希望教授给我把分搞回来。。55555555555