Python把数组排成最小数

本文阅读 1 分钟
首页 Python笔记 正文

首先将数组中的数字全部转换为字符串存储在一个新的数组中,然后比较每两个数字串的拼接的mn和nm的大小,若mn< nm,则m更小,反之n更小,然后把更小的数放入一个新的List中,最后输出即可。使用冒泡排序很方便。

  1. '''
  2. 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
  3. 例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
  4. '''
  5. # 运行环境Python 3.x
  6. from functools import cmp_to_key
  7. # -*- coding:utf-8 -*-
  8. class Solution:
  9. def PrintMinNumber(self, numbers):
  10. if numbers == None or len(numbers) <= 0:
  11. return ''
  12. strList = []
  13. for i in numbers:
  14. strList.append(str(i))
  15. # key是一种比较规则
  16. # 比较 x+y 和 x-y 的大小, 因为为str型, 需要先转换成int型
  17. key = cmp_to_key(lambda x, y: int(x+y)-int(y+x))
  18. strList.sort(key=key)
  19. return ''.join(strList)
  20. # 使用冒泡排序
  21. def PrintMinNumber2(self, numbers):
  22. if numbers == None or len(numbers) <= 0:
  23. return ''
  24. strNum = [str(m) for m in numbers]
  25. for i in range(len(numbers)-1):
  26. for j in range(i+1, len(numbers)):
  27. if strNum[i] + strNum[j] > strNum[j] + strNum[i]:
  28. strNum[i], strNum[j] = strNum[j], strNum[i]
  29. return ''.join(strNum)
  30. numbers = [3, 32, 321]
  31. s = Solution()
  32. print(s.PrintMinNumber(numbers))
  33. # 运行环境 Python 2.7
  34. # class Solution:
  35. # def PrintMinNumber(self, numbers):
  36. # # write code here
  37. # if numbers == None or len(numbers) == 0:
  38. # return ""
  39. # A = ["" for i in range(len(numbers))]
  40. # for i in range(len(numbers)):
  41. # A[i] = str(numbers[i])
  42. # A.sort(self.cmp)
  43. # return "".join(A)
  44. # def cmp(self,e1,e2):
  45. # s1 =e1+e2
  46. # s2 = e2 + e1
  47. # return cmp(s1,s2)
解压密码: detechn或detechn.com

免责声明

本站所有资源出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。

本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户自行鉴别,做一个有主见和判断力的用户。

本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。

Python从1到n整数中1出现的次数
« 上一篇 01-21
Python丑数
下一篇 » 01-21

发表评论