证明原理过程参考链接: 数组中元素组合出最大值.
java版本
class Solution {
public String minNumber(int[] nums) {
Integer []num=new Integer[nums.length];
for(int i=0;i<nums.length;i++){
num[i]=nums[i];
}
Arrays.sort(num,(a,b)->{
long sa=10,sb=10;
while(sa<=a)sa*=10;
while(sb<=b)sb*=10;
return (int)(a*sb+b-b*sa-a);
});
StringBuilder res=new StringBuilder();
for(int ch:num){
res.append(ch);
}
return res.toString();
}
}
C++版本
class Solution {
public:
string minNumber(vector<int>& nums) {
string res;
sort(nums.begin(), nums.end(), [](const int& x, const int& y) {//自定义一个排序序列方式
long long sx = 10, sy = 10;
while (sx <= x)sx *= 10;//sx,sy的实质就是对应x,y的位数,如果x<10,那么他就是一位,
while (sy <= y)sy *= 10;//y跟他组合放在他前面y需要后面加一个0即可
return x * sy + y < y * sx + x;
});
for (int i = 0; i < nums.size(); i++) {
res += to_string(nums[i]);
}
return res;
}
};