Update 45. 把数组排成最小的数.md

补充自定义字符串排序规则的具体拼接示例,并补充比较规则等价于无限小数比较及满足传递性的原理解释。
This commit is contained in:
CyC2018
2026-10-30 20:18:04 +08:00
parent c452b005b5
commit ca6f240d3e
+3 -1
View File
@@ -10,7 +10,9 @@
## 解题思路
可以看成是一个排序问题,在比较两个字符串 S1 和 S2 的大小时,应该比较的是 S1+S2 和 S2+S1 的大小,如果 S1+S2 \< S2+S1,那么应该把 S1 排在前面,否则应该把 S2 排在前面。
可以看成是一个排序问题,在比较两个字符串 S1 和 S2 的大小时,应该比较的是 S1+S2 和 S2+S1 的大小,如果 S1+S2 \< S2+S1,那么应该把 S1 排在前面,否则应该把 S2 排在前面。例如 3 和 32 拼接得到 332 和 323,323 更小,所以 32 排在 3 前面。
这个比较规则可以直接用于排序,是因为它等价于比较每个数字无限重复后得到的小数,例如 3 对应 0.333…,32 对应 0.3232…,后者更小。实数的大小关系有传递性,所以不会出现 a 在 b 前、b 在 c 前、c 又在 a 前的矛盾。
```java
public String crackPassword(int[] password) {