题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。
例如输入数组{32, 321},则输出这两个能排成的最小数字32132。
请给出解决问题的算法,并证明该算法。
算法分析:将每个正整数转换为字符串,然后建立一个以字符为节点的树,树的兄弟顺序存储同一数位上的字符,树的孩子存储其低一位上的字符。输出最小的数字,就是把此树按一定规则遍历一遍。
如下图建立树:
如果输出的字符长度为m,且在每位上数字都不重复,则最大空间复杂度O(m). 建立此树的时间复杂度O(m).
算法:
1)每次取树节点key最小元素,写入输出字符串中,然后对其孩子节点做同样操作。
2)如果节点有叶子,在叶子处插入当前正在遍历的路径,判断是否输出叶子。
时间复杂度O(m)