欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

剑指offer-把数组排成最小的数

程序员文章站 2024-03-24 10:03:34
...

题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

思路:
对字符串数组进行排序,按照s1+s2 < s2+s1的顺序进行排,之前左神的视频里有讲这道题,其实是一种贪心算法

import java.util.Comparator;
import java.util.Arrays;
public class Solution {
    public String PrintMinNumber(int [] numbers) {
        //把整数数组转换成字符串数组,让两个字符串相加最小的放在前面
        String[] strnum = new String[numbers.length];
        for(int i = 0;i < numbers.length;i++){
            strnum[i] = String.valueOf(numbers[i]);
        }
        //lambda表达式来进行
        //Arrays.sort(strnum,(s1,s2)->(s1+s2).compareTo(s2+s1);
        Arrays.sort(strnum,new Comparator<String>(){
           public int compare(String o1,String o2){
               return (o1+o2).compareTo(o2+o1);
           } 
        });
        StringBuilder res = new StringBuilder("");
        for(String str : strnum){
            res.append(str);
        }
        return res.toString();
    }
}

这种排序规则的证明使用反证法
剑指offer-把数组排成最小的数