【剑指offer】把数组排成最小的数

来源:互联网 发布:淘宝头条怎么申请 编辑:程序博客网 时间:2024/06/15 02:00
题目描述:

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

输入:

输入可能包含多个测试样例。
对于每个测试案例,输入的第一行为一个整数m (1<=m <=100)代表输入的正整数的个数。
输入的第二行包括m个正整数,其中每个正整数不超过10000000。

输出:

对应每个测试案例,
输出m个数字能排成的最小数字。

样例输入:
323 13 6223456 56
样例输出:
13236

2345656

题目来自 http://blog.csdn.net/ns_code/article/details/28128551

看到题目第一想法是,先把每个数字换成单独一位的数组 就像吧 1235 换成{1,2,3,5},然后从第一位开始比较大小,小的就放到字符串上,但是我的写法好麻烦,不知道有没有好的写法,

后来就用冒泡排序,先把2个要比较的换成同等位数来比较大小就好了

附上代码

public static int[] minnum(int[] arr)        {            for(int i = 0; i < arr.Length-1; i++)            {                for(int j = i+1; j < arr.Length; j++)                {                    int tempi = arr[i], tempj = arr[j];                    if (tempi.ToString().Length > tempj.ToString().Length)                    {                        while (tempi.ToString().Length > tempj.ToString().Length)                        {                            tempj = tempj * 10;                        }                    }                    else                    {                        while (tempi.ToString().Length < tempj.ToString().Length)                        {                            tempi = tempi * 10;                        }                    }                    if (tempj < tempi)                    {                        var temp = arr[j];                        arr[j] = arr[i];                        arr[i] = temp;                    }                }            }            return arr;        }
有更好的方法吗?

原创粉丝点击