1 题目描述
输入一个整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出所有数字中最小的一个。例如输入数组 {3,32,321},则打印出这 3 个数字能排成的最小数字 321323.
2 算法描述
1 将 m 和 n 进行和合并,如 mn < nm 合并方式为 mn
2 数字在合并的时候会出现大数问题,我们应该将 整数数组转换成字符串数组进行操作
3 代码实现 java
public class PrintMinNumber {
public static void main(String[] args) {
int[] arrays=new int[]{1,2,3,4,5,1};
PrintMinNumber(arrays);
}
private static void PrintMinNumber(int[] arrays) {
if(arrays==null || arrays.length<=0) return;
//将证书数组转换成字符串数组
String[] strs=new String[arrays.length];
StringBuilder result= new StringBuilder();
for(int i=0;i<strs.length;i++){
strs[i]=String.valueOf(arrays[i]);
}
result.append(strs[0]);
for(int i=1;i<strs.length;i++){
compare(result,strs[i]);
}
System.out.println(result.toString());
}
private static void compare(StringBuilder result, String string) {
String resultString=result.toString();
for(int i=0;i<Math.min(resultString.length(), string.length());i++){
if(resultString.charAt(i)>string.charAt(i)){
result.insert(0, string);
return;
}else if(resultString.charAt(i)<string.charAt(i)){
result.append(string);
return;
}
}
if(resultString.length()>string.length()){
result.insert(0, string);
}else{
result.append(string);
}
}
}