LeetCode0008-string转int
同样是一道美团测开算法题,重点考察边界值、异常场景的覆盖(白盒测试思维)
考点:
异常、特殊场景的覆盖,如:特殊字符、空格、int范围
char转int
//字符串转整数 //https://leetcode-cn.com/problems/string-to-integer-atoi/ //重点考察 基本数据类型的转化、边界值 public class Num008_StringToNumber { public static int myAtoi(String s) { char[] result = s.toCharArray(); int length = s.length(); int i = 0; int flag = 1; int ans = 0; // 去空格 while (i < length && result[i] == ' ') { i++; } // 这里是,如果空格都去掉之后,i大于长度,会发生数组越界->这个自己没有想到 if (i >= length) return 0; if (result[i] == '-') { flag = -1; i++; } else if (result[i] == '+') { flag = 1; i++; } else if (!Character.isDigit(result[i])) { return 0; } for (; i < s.length(); i++) { if (Character.isDigit(result[i])) { int num = result[i] - '0'; // 本来应该是 ans * 10 + digit > Integer.MAX_VALUE // 但是 *10 和 + digit 都有可能越界,所有都移动到右边去就可以了。 if (ans > (Integer.MAX_VALUE - num) / 10) { return ans = flag == -1 ? Integer.MIN_VALUE : Integer.MAX_VALUE; } ans = ans * 10 + num; } else return ans; } return flag * ans; } public static void main(String[] args) { String s = "3.14"; int result = myAtoi(s); System.out.println(result); System.out.println(Character.isDigit('.')); System.out.println(Integer.MAX_VALUE); } }