题目描述
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路
因为前几天刷过这道题:字符串的顺序排列,想到其实这题做法也是排列组合出各种可能的数字,然后比较大小,取其最小的即可。
public class Solution {
//输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
// 例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
private Long MinNum = Long.MAX_VALUE;
public String PrintMinNumber(int [] numbers) {
if(numbers.length == 0){
return "";
}
getMinNum(numbers , 0);
return String.valueOf(MinNum);
}
private void getMinNum(int[] numbers , int ops){
if(ops == numbers.length){
StringBuffer sb = new StringBuffer();
for(int i : numbers){
sb.append(String.valueOf(i));
}
if(MinNum > Long.parseLong(sb.toString())){
MinNum = Long.parseLong(sb.toString());
}
}
for(int i =ops ; i< numbers.length ;i++){
int temp = numbers[i];
numbers[i] = numbers[ops];
numbers[ops] = temp;
getMinNum(numbers , ops+1);
temp = numbers[i];
numbers[i] = numbers[ops];
numbers[ops] = temp;
}
}
}