返回递减整数

2024-04-25 21:03:37 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试获取一个整数并将其作为降序整数从函数返回。你知道吗

我先是这样做的:

def Descending_Order(num):
    n = str(num)
    return(int(n[::-1]))

因为测试中只有降序的数字;有点俗气,但它起作用了。。现在我想做一个任意数的数,让它从大到小返回。你知道吗

如您所见,我尝试将int转储到字符串(n)中,并像处理数组一样对其进行操作。你知道吗

例如:

1201将返回2110

def Descending_Order(num):
    n = str(num)
    i = 0
    swap = 0

    while i < len(n):
        if i+1>len(n):
            break
        elif n[i] < n[i+1]:
            swap = n[i]
            n[i]= n[i+1]
            n[i+1]=swap
            i+=1
        else:    
            i+=1
    return(n)

print(Descending_Order(1201))

Tags: 函数字符串lenreturndeforder数字整数
3条回答

字符串是iterable的,因此可以将它们传递到sorted中,如下所示:

def largest_number(num):
    num = str(num)
    ordered = ''.join(sorted(num, reverse=True))
    return int(ordered)

largest_number(87491)
>> 98741

^{}返回一个列表,因此sorted('87491', reverse=True)将返回:

['9', '8', '7', '4', '1']

将列表传递到^{}(链接到join方法的解释)将返回:

'98741'

正如其他答案所指出的,这是一个排序问题。您可以使用内置的排序函数,但这可能需要(相对)较长的时间,而且如果您刚刚开始,最好编写自己的实现,而不是依赖库魔术。你知道吗

因为我们只对0到9之间的整数进行排序,所以我们可以使用比python的sorted使用的timsort更快的排序算法。你知道吗

我们要做的是计算每个数字出现的次数。然后我们构造一个数字,它的9和原来的一样多,然后是8。。。直到0。你知道吗

def Decending_Order(num):
    arr = [0,0,0,0,0,0,0,0,0,0]
    res = []
    for i in str(num):
        arr[int(i)] += 1
    for i in range(0,9):
        while arr[i] > 0:
            res.append(str(i))
            arr[i] -= 1
    return res.reverse()

一个很好的单行线(基本上和上面一样:变成一个字符串,反向排序,回到int):

def largest_num (num): return int (sorted (str (num), reverse = True))

相关问题 更多 >