Python把数组排成最小数
首先将数组中的数字全部转换为字符串存储在一个新的数组中,然后比较每两个数字串的拼接的mn和nm的大小,若mn< nm,则m更小,反之n更小,然后把更小的数放入一个新的List中,最后输出即可。使用冒泡排序很方便。
- '''
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
- 例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
- '''
- # 运行环境Python 3.x
- from functools import cmp_to_key
- # -*- coding:utf-8 -*-
- class Solution:
- def PrintMinNumber(self, numbers):
- if numbers == None or len(numbers) <= 0:
- return ''
- strList = []
- for i in numbers:
- strList.append(str(i))
- # key是一种比较规则
- # 比较 x+y 和 x-y 的大小, 因为为str型, 需要先转换成int型
- key = cmp_to_key(lambda x, y: int(x+y)-int(y+x))
- strList.sort(key=key)
- return ''.join(strList)
- # 使用冒泡排序
- def PrintMinNumber2(self, numbers):
- if numbers == None or len(numbers) <= 0:
- return ''
- strNum = [str(m) for m in numbers]
- for i in range(len(numbers)-1):
- for j in range(i+1, len(numbers)):
- if strNum[i] + strNum[j] > strNum[j] + strNum[i]:
- strNum[i], strNum[j] = strNum[j], strNum[i]
- return ''.join(strNum)
-
- numbers = [3, 32, 321]
- s = Solution()
- print(s.PrintMinNumber(numbers))
-
- # 运行环境 Python 2.7
-
- # class Solution:
- # def PrintMinNumber(self, numbers):
- # # write code here
- # if numbers == None or len(numbers) == 0:
- # return ""
- # A = ["" for i in range(len(numbers))]
- # for i in range(len(numbers)):
- # A[i] = str(numbers[i])
- # A.sort(self.cmp)
- # return "".join(A)
- # def cmp(self,e1,e2):
- # s1 =e1+e2
- # s2 = e2 + e1
- # return cmp(s1,s2)
解压密码: detechn或detechn.com
免责声明
本站所有资源出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户自行鉴别,做一个有主见和判断力的用户。
本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。