题目:给定一组非负整数 nums
,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
输入:nums = [10,2] 输出:"210"
示例 2:
输入:nums = [3,30,34,5,9] 输出:"9534330"
思路:对于两个数而言,只需要比较哪个放前面结果比较大,如果ab>ba,则a放在b前。
当一个数组中有n个数时,不需要得到n个数的全排列。上述排序规则满足传递性,两个元素比较就可以确定它们在排序以后的相对位置关系。
class Solution { public String largestNumber(int[] nums) { int n = nums.length;//数组中数字个数 //数字数组转化成字符数组 String[] strArr = new String[n]; for(int i = 0; i < n; i++){ strArr[i] = String.valueOf(nums[i]); } //Lambda表达式:重写排序规则(4ms) Arrays.sort(strArr, (o1,o2) -> (o2+o1).compareTo(o1+o2)); //字符数组转化成字符串 StringBuilder sb = new StringBuilder(); for(String num : strArr){ sb.append(num); } String result = sb.toString(); //特殊情况,存在若干个0 if(result.charAt(0) == '0'){ result = "0"; //单引号是字符,双引号是字符串 } return result; } }
一些知识点
-
Lambda表达式
-
lambda expression是一个匿名函数(没有函数名的函数),可以表示闭包。
-
Java 8的一个大亮点是引入Lambda表达式,允许把函数作为一个方法的参数(函数作为参数传递进方法中)。lambda表达式会被编译成一个函数式接口(一个接口有且仅有一个抽象方法,这个接口叫函数式接口)。
-
可用lambda表达式代替匿名的内部类,代码更简洁,还可读。
-
举例1:
//不用lambda的老方法
Runnable runnable1=new Runnable(){
@Override
public void run(){
System.out.println("Running without Lambda");
}
};
//用lambda:
Runnable runnable2=()->system.out.println("Running from Lambda");
-
举例2:
o1,o2直接出线是因为数据类型可以省略,因为可以有编译器推断得出,称为”类型推断“
Comparator<Integer> com2=(o1,o2) -> Integer.compare(o1, o2);*//lambda表达式写法*
-
-
一些Lambda表达式的简单例子:
-
-
Arrays.sort().compare();
string中的compareTo方法