重新排列某一整数,返回下一个最大整数

解题思路:尽量不动高位数字(中心思想)。首先,比较倒数第二位数字与倒数第一位数字,若前者比后者大,则继续比较倒数第三位与倒数第二位,循环直到发现某高位数字比其低一位的数字小,这说明有了可操作空间。其次,对该高位数字后的所有数字进行筛选,选出所有大于该高位数字的数字,并从中选出最小值。最后,将选出的最小值替换该高位数字,再对剩下的数字按升序排序后加在最小值的末尾,问题解决。

def next_bigger(n):
    n_list = list(str(n))
    for i in range(len(n_list)-2, -1, -1):
        if n_list[i] < n_list[i+1]:
            temp = n_list[i:]
            min_num = min([x for x in temp if x > temp[0]])
            index = temp.index(min_num)
            temp[0], temp[index] = temp[index], temp[0]
            return int(''.join((n_list[0:i])) + temp[0] + ''.join(sorted(temp[1:])))
    return -1

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值