给定一个长度为n的数组nums,数组由一些非负整数组成,现需要将他们进行排列并拼接,每个数不可拆分,使得最后的结果最大,返回值需要是string类型,否则可能会溢出。
数据范围:,
进阶:时间复杂度 ,空间复杂度:
[30,1]
"301"
[2,20,23,4,8]
"8423220"
[2]
"2"
[10]
"10"
输出结果可能非常大,所以你需要返回一个字符串而不是整数。
# # 最大数 # @param nums int整型一维数组 # @return string字符串 # class MySort(str): def __lt__(x, y): return x+y > y+x class Solution: def solve(self , nums): # write code here s = [str(n) for n in nums] s2 = sorted(s, key=MySort) s1 = ''.join(s2) if s2[0]=='0': return '0' return s1
class Solution: def solve(self , nums ): # write code here self.res = '' n = len(nums) def dfs(index, path): if index == n: tmp = "".join(path) if tmp > self.res: self.res = tmp return for i in range(index, n): nums[index], nums[i] = nums[i], nums[index] path.append(str(nums[index])) dfs(index+1, path) path.pop() nums[index], nums[i] = nums[i], nums[index] dfs(0, []) if int(self.res) == 0: return '0' return self.res
# # 最大数 # @param nums int整型一维数组 # @return string字符串 # class Solution: def compare(self, nums, i1,i2): # 返回 【大, 小】 str1, str2 = nums[i1], nums[i2] for i in range(min(len(str1),len(str2))): if str1[i]>str2[i]: return if str1[i]<str2[i]: nums[i1], nums[i2]=str2,str1 return # 1110, 111 应该把111放在1110前面 # 1112, 111 # 走到这一步说明前面i位都相等 如果str1 i+=1 if len(str1)>len(str2) and str1[i]<str2[-1]: nums[i1], nums[i2]=str2,str1 return if len(str1)<len(str2) and str2[i]>str1[-1]: nums[i1], nums[i2]=str2,str1 return def solve(self , nums ): # write code here nums=list(map(str,nums)) for i in range(len(nums)): for j in range(len(nums)-i-1): self.compare(nums, j, j+1) if nums[0]=="0": return "0" return "".join(nums)
# # 最大数 # @param nums int整型一维数组 # @return string字符串 # class Solution: def solve(self , nums ): # write code here ##第二套#[编程题]题2 #给定一个数组由一些非负整数组成,现需要将他们进行排列并拼接,使得最后的结果最大,返回值需要是string类型 否则可能会溢出 s1 = [] nums = list(map(str,nums)) for x in nums: s1.append(list(x)) s1.sort(reverse=True) i = 0 while i<len(nums)-1: if s1[i][0]==s1[i+1][0] and len(s1[i])>len(s1[i+1]): s1[i],s1[i+1] = s1[i+1],s1[i] i = -1 i = i+1 s2 = '' for y in s1: s2 = s2+''.join(y) if int(s2)==0: s2='0' return s2