剑指Offer45-把数组排成最小的数
题目
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
输入: [10,2]
输出: “102”
解法
此题求拼接起来的 “最小数字” ,本质上是一个排序问题。
排序判断规则: 设 nums 任意两数字的字符串格式 x 和 y ,则
若拼接字符串 x+y>y+x ,则 m>n ;
反之,若 x+y<y+x ,则 n<m ;
class Solution {
public String minNumber(int[] nums) {
StringBuilder stb = new StringBuilder();
int n = nums.length;
String[] strs = new String[n];
for(int i = 0 ; i < n ; ++i){
strs[i] = String.valueOf(nums[i]);
}
//排序
Arrays.sort(strs,(x,y)->(x+y).compareTo(y+x));
for(String s : strs){
stb.append(s);
}
return stb.toString();
}
}