说到这个接口得从剑指offer32题开始,我就想直观方法,全排列问题,虽然慢,其他方法再看。。以前就知道这个接口,这不刷题实在不行了,想起他了🤣🤣,进入正题,
可以发现他注解是函数式接口,那函数式编程加lamba表达式,就简单了,
其中这个方法int compare(T o1, T o2);根据官方介绍可知,
a negative integer, zero, or a positive integer as the
* first argument is less than, equal to, or greater than the
* second.
这就不用我翻译了吧都看到懂,看不懂cv 百度翻译,就是小于0–>第一个参数o1小于第二个参数o2、等于零 o1等于o2 大于0就是~~ ·不用说了(注意是值)
这就不得不提Comparable接口了,只有一个compareTo方法,返回值解释跟上面一模一样的···,你会发现好多类实现了他,如图BigDecimal,包装类Long,Boolean.Integer等等其他,也就是对这些类型可以强制排序
所以这个题理解为自底向上连接排列找最小,也就是每相邻两个排列去最小的 如:
- 332 323 当然323,所以32顺序在3前面,
- 接着32321 32132 所以321顺序在32前面
- 合起来答案就是321 32 3
代码如下就搞定了
package niuke;
import java.util.ArrayList;
/**
* @Author tdragon.
* @Date 2021/4/14.
* @Time 20:32
* @Description: 全排列问题 输入一个正整数数组,把数组里所有数字拼接
* 起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},
* 则打印出这三个数字能排成的最小数字为321323。
*/
public class JZ32 {