输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
这题如果用暴力思维想,数组内多个元素,排列组合的可能性很多, 可以简化成某两个相邻元素的排列组合,只有两种可能。 从头到尾两两组合并进行比较,根据比较结果实时调整位置,最终就能得到最佳的元素顺序
某两个相邻元素比较的思路:s1+s2的值若比s2+s1大,说明s2+s1才是我们想要的,对换数组中s1和s2的位置 比较具体过程: (1)元素1从数组首元素开始,元素2从元素1下一个元素开始,遍历数组 (2)把遍历到的两个相邻元素先连接成字符串(1在前和2在前两种情况):在两个数字间加个空串,就整体变成字符串了, 再把两个字符串转换成两个整型数n1和n2,如果n2比n1小,就把元素1和元素2 在数组中的位置对换
遍历完数组后,数组中元素顺序就是最佳的了,接下来只需把所有数组元素直接连接成字符串,并返回即可
网上很多答案使用比较器来比较,但我对比较器不熟练,所以就直接调整数组元素顺序了(比较器在剑指Offer题里出场率很高啊~)