当前位置: 代码迷 >> 综合 >> Java把数组排成最小的数
  详细解决方案

Java把数组排成最小的数

热度:99   发布时间:2024-02-02 17:16:44.0

题目描述

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

 

import java.util.ArrayList;public class Solution {/*** 特殊的冒泡排序:比较两个字符串s1, s2大小的时候,先将它们拼接起来,* 比较s1+s2,和s2+s1那个大,如果s1+s2大,那说明s2应该放前面,* 所以按这个规则,s2就应该排在s1前面。* 解题思路:* 先将整型数组转换成String数组,然后将String数组排序,最后将排好序的字符串数组拼接出来。* 关键就是制定排序规则。* 排序规则如下:* 若ab > ba 则 a > b,* 若ab < ba 则 a < b,* 若ab = ba 则 a = b;*/public String PrintMinNumber(int [] numbers) {if(numbers == null || numbers.length == 0){return "";}//冒泡排序趟数 n趟 n=numbers.length-1for(int i=0;i<numbers.length-1;i++){//每趟排序 需要n-i次 numbers.length-1-ifor(int j=0;j<numbers.length-1-i;j++){long sumPreAfter = Long.valueOf(numbers[j] + "" + numbers[j+1]);long sumAfterPre = Long.valueOf(numbers[j+1] + "" + numbers[j]);//如果s1+s2 > s2+s1 那么根据冒泡排序规则 会将s1+s2和s2+s1交换位置,得到大的组合if(sumPreAfter > sumAfterPre){int temp = numbers[j];numbers[j] = numbers[j+1];numbers[j+1] = temp;}}}String result = "";//冒泡排序后的顺序 就是组合最小-->组合最大的顺序for(int k=0;k<numbers.length;k++){result += numbers[k];}return result;}
}