Largest Number(最大数字)
来源:互联网 发布:广东广电网络 机顶盒 编辑:程序博客网 时间:2024/06/04 18:29
Largest Number
要求:给定一个非负整数的列表,排列它们形成最大的整数,考虑到整数的取值范围,最后的结果可采用字符串的形式表示。
例子:[2,256]=>2562,[824,8247]=>[8248247]
第一种方法:
刚开始做这道题的时候,整个思路停留在基数排序上,想着把这个排序过程,通过修改基数排序完成(太复杂了,想了好长时间)。
算法实现:
def largeNum(nums): nlen = len(nums) maxD = 0 loop = 1 for i in range(nlen): nums[i] = str(nums[i]) if len(nums[i]) > maxD: maxD = len(nums[i]) nums = sorted(nums,key=lambda x:x[0],reverse=True) shorted = [] for i in range(nlen): strLen = len(nums[i]) if strLen < maxD: loStr = '0' if nums[i][0] < nums[i][strLen-1]: loStr = nums[i][strLen-1] else: loStr = nums[i][0] nums[i] += loStr*(maxD-strLen) shorted.append(strLen) else: shorted.append(0) while loop < maxD: stPos = 0 for i in range(1,nlen): loch = loop - 1 while loch >= 0 and nums[i][loch] == nums[i-1][loch]: loch -= 1 if loch != -1: stPos = i continue key = shorted[i] value = nums[i] end = i while end > stPos and value[loop] > nums[end-1][loop]: nums[end] = nums[end-1] shorted[end] = shorted[end-1] end -= 1 nums[end] = value shorted[end] = key loop += 1 for i in range(nlen): if shorted[i] > 0: nums[i] = nums[i][0:shorted[i]] res = ''.join(nums) if res[0]=='0' return '0' return res
第二种方法:
想象其实,这就是一道字符串排序的题目,数字排序算法在这基本都适用。
算法实现:
def largeNum(nums): nlen = len(nums) nums=list(map(str,nums)) for i in range(1,nlen): if nums[i]+nums[i-1] > nums[i-1] + nums[i]: key = nums[i] j = i while j > 0 and key + nums[j-1] > nums[j-1] + key: nums[j] = nums[j-1] j -= 1 nums[j] = key res = ''.join(nums) if res[0] == '0': return '0' return res
1 0
- Largest Number(最大数字)
- Leetcode 179 Largest Number 构造最大数字
- LeetCode--Largest Number(最大数字)Python
- LeetCode OJ 之 Largest Number (最大的数字)
- 179. Largest Number 排成最大的数字(重要!)
- Leetcode 179 Largest number (最大的数字 和最小的数字)
- *[Lintcode]Largest Number 最大数
- [lintcode]最大数 Largest Number
- leetcode_[python/C++] 179. Largest Number(数字组合成最大数)
- Largest Number 拼凑成最大的数
- LeetCode 179. Largest Number(最大数)
- Largest Number组合最大数算法详解
- Largest Number
- Largest Number
- Largest Number
- Largest Number
- Largest Number
- Largest Number
- Oracle基本语法学习
- 主线程和子线程的区别
- Java之美[从菜鸟到高手演变]系列之博文阅读导航
- Android 自定义控件 轻松实现360软件详情页
- jq 下拉选中
- Largest Number(最大数字)
- ASP.NET Core 1.0 入门——Application Startup
- stdClass 是什么
- servermain启动过程
- Party_纪中1328_spfa
- Android Scroller OverScroller使用
- 【九度OJ】:1048 判断三角形类型
- PAT L2-007. 家庭房产(并查集)
- 物理概念的理解