阴阳神万物主 发表于 2019-12-4 22:55
我来玩玩,看看有没有我没想到的缺陷。
时间复杂度应该是O(n+0.5(n+n^2)) n为列表长度
大O写法的话直接写成O(n^2)就行了
danteer 发表于 2019-12-5 11:11
大O写法的话直接写成O(n^2)就行了
哦是这样啊,我这接触不深
danteer 发表于 2019-12-5 09:50
这函数是一次性的嘛
为什么这么说呢{:10_245:}
hrp 发表于 2019-12-5 12:29
为什么这么说呢
我运行第一次能用,再运行第二次就报错了啊。。。。。
danteer 发表于 2019-12-5 14:29
我运行第一次能用,再运行第二次就报错了啊。。。。。
我运行没问题,py3.8
能告诉我运行哪个列表报错了么{:5_109:}
#每日一题文档,旨在练习Pyhon熟练度和提高算法
def fun284(list_Num = ,n = 10):
#n不能小于数组中元素位数最长的值
'''日期20191204
原文链接:https://fishc.com.cn/forum.php?mod=viewthread&tid=151816&highlight=%C3%BF%C8%D5%D2%BB%CC%E2
今天的题目:
给出一组非负整数,重新排列它们的顺序,把它们组成一个最大的整数。
示例 1:
输入:
输出:8423201
示例 2:
输入:
输出:6654
'''
#该问题只要判断出每个元素的‘大小就可以’
#比较方法是比较最左边的大小,如果相同切有下一位则比较下一位
#该方法比较大小可以通过转换为同一次级10**n,如65和6则转换为65和60
def buquan(num,len_num = n):
#将所有整数通过末尾加 原来末尾的最后一位 转换为长度相同的整数
while num <10**n-1:
num= num * 10 +num%10
return num
s = ''
list_Num.sort(key = buquan ,reverse = True)#将数字变为字符串降序
for i inlist_Num:
s += str(i)
return int(s)
print('输入为:\t输出最大整数为:%d' %(fun284(list_Num = )) )
print('输入为:\t输出最大整数为:%d' %(fun284(list_Num = )) )
print('输入为:\t输出最大整数为:%d' %(fun284(list_Num = )) )
print('输入为:\t输出最大整数为:%d'%(fun284(list_Num = )) )
print('输入为:\t输出最大整数为:%d' %(fun284(list_Num = )) )
print('输入为:\t输出最大整数为:%d' %(fun284(list_Num = )) )
原文看起来好长,发个短的#每日一题文档,旨在练习Pyhon熟练度和提高算法
def fun284(list_Num = ,n = 10):
#n不能小于数组中元素位数最长的值
def buquan(num,len_num = n):
#将所有整数通过末尾加 原来末尾的最后一位 转换为长度相同的整数
while num <10**n-1:
num= num * 10 +num%10
return num
s = ''
list_Num.sort(key = buquan ,reverse = True)#将数字变为字符串降序
for i inlist_Num:
s += str(i)
return int(s)
print('输入为:\t输出最大整数为:%d' %(fun284(list_Num = )) )
print('输入为:\t输出最大整数为:%d' %(fun284(list_Num = )) )
print('输入为:\t输出最大整数为:%d' %(fun284(list_Num = )) )
print('输入为:\t输出最大整数为:%d'%(fun284(list_Num = )) )
print('输入为:\t输出最大整数为:%d' %(fun284(list_Num = )) )
print('输入为:\t输出最大整数为:%d' %(fun284(list_Num = )) )
>>>
==================== RESTART: C:\Users\13555\Desktop\1.py ====================
输入为: 输出最大整数为:8423201
输入为: 输出最大整数为:6654
输入为: 输出最大整数为:292822822262242
输入为: 输出最大整数为:66661650595809
输入为: 输出最大整数为:2221
输入为: 输出最大整数为:6764
>>>
hrp 发表于 2019-12-5 14:39
我运行没问题,py3.8
能告诉我运行哪个列表报错了么
就像这样
本帖最后由 sn8625 于 2019-12-5 16:13 编辑
'''
给出一组非负整数,重新排列它们的顺序,把它们组成一个最大的整数
输入:
输出:8423201
输入:
输出:6654
'''
def number():
l =
nl = len(l)
lr = []
if nl == 1:
return l
ln =
ln.sort(reverse=True)
for i in range(nl):
for j in range(nl):
lt = ln.copy()
s = lt.pop(i)
lt.insert(j,s)
lr.append(int(''.join(lt)))
# print(lr)
return max(lr)
f = number()
print(f)
from itertools import permutations
def fun284(x):
list_x = []
for i in permutations(x):
list_x.append(int(''.join()))
return max(list_x)
danteer 发表于 2019-12-5 15:24
就像这样
我知道原因了,因为你的测试方法测试完没有退出程序,导致列表没清空,而我刚好复用list2了(其实不复用也会出现不可预知的结果),第二次测试就直接追加数据进去,就报错了。我吧list2 list3 result 都移到函数里面,每次运行都清空,就OK了,这是个小坑,多谢提醒{:5_109:}
def fun(lst):
lst.sort(key = lambda x: str(x), reverse = True)
return int(''.join(map(str, lst)))
以上例子均测试无误
import itertools
result = []
compare_list = []
int_list =
str_list = []
for member in int_list:
str_list.append(str(member))
for member_list in itertools.permutations(str_list):
list1 = member_list[:]
for i in list1:
for j in i:
compare_list.append(str(j))
if result < compare_list:
result,compare_list = compare_list,result
compare_list = []
for i in result:
for j in i:
print(j,end = '')
18463102026 发表于 2019-12-5 15:09
原文看起来好长,发个短的
这行结果不对啊
输入为: 输出最大整数为:66661650595809
Unicorn# 发表于 2019-12-4 22:37
恭喜通过!
执行用时:101 ms
本帖最后由 zltzlt 于 2019-12-5 21:02 编辑
阴阳神万物主 发表于 2019-12-4 22:55
我来玩玩,看看有没有我没想到的缺陷。
时间复杂度应该是O(n+0.5(n+n^2)) n为列表长度
解答错误
输入:
输出:"00"
预期结果:0
冬雪雪冬 发表于 2019-12-4 23:31
感谢楼上两位的提醒。再次修改:
恭喜通过!
执行用时:101 ms
hrp 发表于 2019-12-5 00:20
输入 超时(结果应是 9876543210)
Lamotu 发表于 2019-12-5 09:21
解答错误
输入:
输出:91559352791135771622
预期结果:93529155791135771622
danteer 发表于 2019-12-5 09:45
用了递归就没法解决稍微大一点的列表了。。。。。。
输入 超时