题目描述:
题解一:
思路:将nums中数字重复,取前面几位有效位进行比较。比如3和32,都重复5次33333 3232323232,32323比33333小,因此32应该放在3之前。
1.定义一个dict strnums,对nums中每个数字转为str,重复5次取前10位,按照 在原nums中的序号:前10位格式加入strnums。
2.对strnums按照key从小到大排序。
3.创建新list newnums,按照排序后的strnums中在nums的序号依次将对应数字加入newnums。
4.将newnums中数字拼接为str。
class Solution: def minNumber(self, nums: List[int]) -> str: strnums = {} for i in range(len(nums)): strnumi =str(nums[i])*5 strnumi = strnumi[0:10] strnums[i] = strnumi strlist = sorted(strnums.items(),key=lambda item:item[1]) newnums = [] for t in strlist: newnums.append(str(nums[t[0]])) result = "".join(newnums) return result
题解二:比较a+b与b+a,从而判断a与b顺序。
class Solution: def minNumber(self, nums: List[int]) -> str: def sort_rule(x, y): a, b = x + y, y + x if a > b: # 结果为大,返回一个正数 return 1 elif a < b: # 结果为小,返回一个负数 return -1 else: return 0 strs = [str(num) for num in nums] strs.sort(key=functools.cmp_to_key(sort_rule)) return ''.join(strs)