面试题 33

来源:互联网 发布:excel多表格数据联动 编辑:程序博客网 时间:2024/06/09 22:00

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);        }    }}
0 0
原创粉丝点击