今天在LeetCode上刷题,看到一位coder的题解中用到了“0x3f3f3f3f”,不解。
```java
int[][] dp = new int[kl][rl];
for (int i = 0; i < kl; ++i) {
Arrays.fill(dp[i], 0x3f3f3f);
}
```
为啥在设置最大值时不用Integer.MAX_VALUE,就算不用Integer.MAX_VALUE,那为啥不设置为0x7fffffff。出于好奇,我立马去互联网寻找了一番答案。
原来,在部分情况下,我们会对两个大数求和后与另外一个数做么比较,此时我们想要的效果是两个大数相加结果还是大数。比如:
```java
boolean res = (dp[1][1] + dp[1][2]) > dp[1][3]
```
如果起初初始化时我们将其设置为Integer.MAX_VALUE,那么上述res的结果就是false,因为Integer.MAX_VALUE + Integer.MAX_VALUE 结果溢出,为-2,因此肯定比Integer.MAX_VALUE小。然而,如果设置为0x3f3f3f3f,那么两数之和就是 2122219134(1061109567 + 1061109567),这个值既没有溢出(小于Integer.MAX_VALUE),同时也比1061109567大。正好符合我们的预期即res的结果为true。

有意思的0x3f3f3f3f