一:输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
示例 1:
输入: [10,2]
输出: "102"
二:思维:
解题思路:
此题求拼接起来的 “最小数字” ,本质上是一个排序问题。
排序判断规则: 设 nums 任意两数字的字符串格式 xx 和 yy ,则
若拼接字符串 x + y > y + xx+y>y+x ,则 m > nm>n ;
反之,若 x + y < y + xx+y<y+x ,则 n < mn<m ;
根据以上规则,套用任何排序方法对 nums执行排序即可。
算法流程:
初始化: 字符串列表 strsstrs ,保存各数字的字符串格式;
列表排序: 应用以上 “排序判断规则” ,对 strsstrs 执行排序;
返回值: 拼接 strsstrs 中的所有字符串,并返回。
三:解法:
- 能想到的方法:
class Solution:
def MinNumber(self,nums):
if not nums:
return ''
strNum = [str(num) for num in nums]
print(strNum)
for i in range(len(nums)-1):
for j in range(i+1,len(nums)):
if strNum[i] + strNum[j] > strNum[j]+strNum[i]:
strNum[i],strNum[j] = strNum[j],strNum[i]
return ''.join(strNum)
if __name__ == '__main__':
nums = [3,30,34,5,9]
su = Solution()
print(su.MinNumber(nums))
以下的两种方式没有看懂;
2.快速排序
- 内置函数