方法一:列出全排列 (只能通过一部分,数据大了会超时,超内存)
Python标准库中的itertools模块提供了两个函数用于计算排列和组合:
-
permutations(iterable, r=None):从序列iterable中取出r个元素的所有排列,返回一个迭代器对象。
-
combinations(iterable, r):从序列iterable中取出r个元素的所有组合,返回一个迭代器对象。
import itertools
n = int(input())
a = list(map(int,input().split()))
all = list(itertools.permutations(a))
num =[]
for i in range(len(all)):
num.append(int("".join(map(str,all[i]))))
print(max(num))
方法一(改1)
import itertools
n = int(input())
a = list(map(int,input().split()))
max_num = 0
for i in itertools.permutations(a):
num = int("".join(map(str,i)))
max_num = max(num,max_num)
print(max_num)
方法一(改2)
import itertools
n = int(input())
a = list(input().split())
print(max(["".join(i) for i in itertools.permutations(a)]))
方法二:75%通过,无法对321 32这种情况进行处理
n = int(input())
a = list(input().split())
for i in range(n):
for j in range(n-i-1):
num = min(len(a[j]),len(a[j+1]))
if int(a[j][0:num]) < int(a[j+1][0:num]):
a[j+1],a[j] = a[j],a[j+1]
print("".join(a))
方法二(改)ac,由对单个数据进行比较改为对组合进行比较
n = int(input())
a = list(input().split())
for i in range(n):
for j in range(n-i-1):
if int(a[j]+a[j+1]) < int(a[j+1]+a[j]):
a[j+1],a[j] = a[j],a[j+1]
print("".join(a))