题目描述
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
输入:nums = [10,2]
输出:"210"
示例 2:
输入:nums = [3,30,34,5,9]
输出:"9534330"
示例 3:
输入:nums = [1]
输出:"1"
示例 4:
输入:nums = [10]
输出:"10"
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/largest-number
思路
排序,比较最高位,最高位大的排在前面,若最高位相同,比较他们组合后(a+b 和 b+a)的大小。将排序好的数组拼接成字符串即为所求结果。
class Solution {
public String largestNumber(int[] nums) {
String[] numss= new String[nums.length];//将数组内的数转化成字符串形式
for(int i=0;i<nums.length;i++){
numss[i]=String.valueOf(nums[i]);
}
Arrays.sort(numss,new Comparator<String>(){
public int compare(String a,String b){
if(a.charAt(0)!=b.charAt(0)){
return b.charAt(0)-a.charAt(0);
}
String aa=a+b;
String bb=b+a;
return bb.compareTo(aa);
}
});
if(numss[0].charAt(0)=='0') return "0";
StringBuilder sb= new StringBuilder();
for(String ky:numss) sb.append(ky);
return sb.toString();
}
}
参考了力扣负雪明烛和Pengcheng Huang的题解。
基础知识
Arrays.sort用法
- Arrays.sort(int[] a)
- Arrays.sort(int[] a, int fromIndex, int toIndex)
- Arrays.sort(T[] a, Comparator<? Super T> c)用Comparator接口实现自定义排序规则
Arrays.sort(arr, new Comparator<Integer>() {
public int compare(Integer a, Integer b) {
//返回值>0交换
return b-a;
}
});
其中1、2都默认升序,若想降序排列,可使用3
StringBuilder用法
可用于字符串连接,比直接“+”更更高效
StringBuilder sb= new StringBuilder();
sb.append("hello");
java常用函数
Java compareTo() 方法
用于将 Number 对象与方法的参数进行比较。可用于比较 Byte, Long, Integer等。
System.out.println(x.compareTo(3));
-
如果指定的数与参数相等返回0。
-
如果指定的数小于参数返回 -1。
-
如果指定的数大于参数返回 1
String.valueOf(*)
将括号内的参数转换为字符串形式。