输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
示例 1:
输入: [3,30,34,5,9]
输出: “3033459”
知识点:
Python字符串可以作比较,比较方法是比较首位ascII码,若首位相同,则比较下一位。
方法:
此题本质上也是排序问题,找到数组的正确排序,关键点就是下面红色部分:
- 先将数组中元素转化成字符串a = [‘3’, ‘30’, ‘34’, ‘5’, ‘9’]
- (此时就为两个字符串比较,其比较原则符合本题所需)
若 nums[i] + nums[j] < nums[j] + nums[i] ,则证明nums[i] 应在nums[j] 左面
- 每次在nums中找到最左的数,存入OUT中,并删除nums中的此数。
- 循环步骤3过程直至a中为空
- 将OUT转化为字符串输出
Python代码
class Solution:
def minNumber(self, nums: List[int]) -> str:
a = []
OUT = []
for i in nums:
a.append('%d' % i)
while a:
num_min = 0
for j in range(1, len(a)):
if a[num_min] + a[j] > a[j] + a[num_min]:
num_min = j
OUT.append(a[num_min])
del a[num_min]
return ''.join(OUT)