今天写leetcode 16:最接近的三数之和的时候,出现了131个测试用例只通过了130的情况
检查了下代码,发现问题出在了Math.abs()函数 。
首先,在Java里,int的取值范围是-2^31 ~(2^31) - 1,即-2147483648 至 2147483647。也就是说,负数的取值范围比整数大1。
对于最后一次测试用例,代码相当于
int a = Math.abs(-1-Integer.MAX_VALUE)
int a =Math.abs(Integer.MIN_VALUE)
此时a的值为-2147483648,他的绝对值应该为2147483648,超出了int类型正数的最大范围,因此在这种情况下,调用Math.abs()函数得到的数字依然是他本身,也就是-2147483648。
这种情况下可以把int类型转换成long类型,就不会出现越界的问题。