danteer 发表于 2019-12-5 11:11:35

阴阳神万物主 发表于 2019-12-4 22:55
我来玩玩,看看有没有我没想到的缺陷。
时间复杂度应该是O(n+0.5(n+n^2)) n为列表长度

大O写法的话直接写成O(n^2)就行了

阴阳神万物主 发表于 2019-12-5 12:06:31

danteer 发表于 2019-12-5 11:11
大O写法的话直接写成O(n^2)就行了

哦是这样啊,我这接触不深

hrp 发表于 2019-12-5 12:29:53

danteer 发表于 2019-12-5 09:50
这函数是一次性的嘛

为什么这么说呢{:10_245:}

danteer 发表于 2019-12-5 14:29:40

hrp 发表于 2019-12-5 12:29
为什么这么说呢

我运行第一次能用,再运行第二次就报错了啊。。。。。

hrp 发表于 2019-12-5 14:39:50

danteer 发表于 2019-12-5 14:29
我运行第一次能用,再运行第二次就报错了啊。。。。。

我运行没问题,py3.8

能告诉我运行哪个列表报错了么{:5_109:}

18463102026 发表于 2019-12-5 15:06:58

#每日一题文档,旨在练习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 = )) )

18463102026 发表于 2019-12-5 15:09:30

原文看起来好长,发个短的#每日一题文档,旨在练习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
>>>

danteer 发表于 2019-12-5 15:24:38

hrp 发表于 2019-12-5 14:39
我运行没问题,py3.8

能告诉我运行哪个列表报错了么

就像这样

sn8625 发表于 2019-12-5 15:41:50

本帖最后由 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)

776667 发表于 2019-12-5 16:37:39

from itertools import permutations

def fun284(x):
    list_x = []
    for i in permutations(x):
      list_x.append(int(''.join()))
    return max(list_x)

hrp 发表于 2019-12-5 16:46:05

danteer 发表于 2019-12-5 15:24
就像这样

我知道原因了,因为你的测试方法测试完没有退出程序,导致列表没清空,而我刚好复用list2了(其实不复用也会出现不可预知的结果),第二次测试就直接追加数据进去,就报错了。我吧list2 list3 result 都移到函数里面,每次运行都清空,就OK了,这是个小坑,多谢提醒{:5_109:}

零0℃度 发表于 2019-12-5 18:21:45

def fun(lst):
    lst.sort(key = lambda x: str(x), reverse = True)
    return int(''.join(map(str, lst)))

闲愚 发表于 2019-12-5 20:06:37

以上例子均测试无误
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 = '')

闲愚 发表于 2019-12-5 20:15:02

18463102026 发表于 2019-12-5 15:09
原文看起来好长,发个短的

这行结果不对啊
输入为:      输出最大整数为:66661650595809

zltzlt 发表于 2019-12-5 20:46:32

Unicorn# 发表于 2019-12-4 22:37


恭喜通过!

执行用时:101 ms

zltzlt 发表于 2019-12-5 20:47:18

本帖最后由 zltzlt 于 2019-12-5 21:02 编辑

阴阳神万物主 发表于 2019-12-4 22:55
我来玩玩,看看有没有我没想到的缺陷。
时间复杂度应该是O(n+0.5(n+n^2)) n为列表长度

解答错误

输入:
输出:"00"
预期结果:0

zltzlt 发表于 2019-12-5 20:48:07

冬雪雪冬 发表于 2019-12-4 23:31
感谢楼上两位的提醒。再次修改:

恭喜通过!

执行用时:101 ms

zltzlt 发表于 2019-12-5 20:50:19

hrp 发表于 2019-12-5 00:20


输入 超时(结果应是 9876543210)

zltzlt 发表于 2019-12-5 20:53:00

Lamotu 发表于 2019-12-5 09:21


解答错误

输入:
输出:91559352791135771622
预期结果:93529155791135771622

zltzlt 发表于 2019-12-5 20:54:31

danteer 发表于 2019-12-5 09:45
用了递归就没法解决稍微大一点的列表了。。。。。。

输入 超时
页: 1 [2] 3
查看完整版本: Python:每日一题 284