刷题(十二)

题目

让函数PermulationStep(num)接受传递的num参数,并使用相同的数字返回大于num的下一个数字
例如:如果num为123,则返回132; 如果为12345,则返回12354. 如果一个数字没有更大的排列,则返回-1(即999)

例子
输入:11121
输出:11211

输入:41352
输出:41532

分析

这里可以使用while...else...的语法,当满足更大排列的时候,在while中执行一定的算法,返回下一个大于num的数字,如果不满足更大排列(比如只有一位小数、或者三位数字都相同),这时候执行不了while中的算法,直接进入else。python中有while...else...,for...else的特殊用法,表示当while/for循环正常执行完而不退出的情况下,接着执行else代码块,而一旦while/for中跳出了循环,就不会执行else代码块

代码实现

def permulationstep(num):
    s = list(str(num))
    i = len(s) - 1
    while i > 0:
        if s[i - 1] < s[i]:
            s[i - 1], s[i] = s[i], s[i - 1]
            return s
        else:
            i = i - 1
    else:
        return -1


print(permulationstep(11121))
原文地址:https://www.cnblogs.com/my_captain/p/12821748.html