LeetCode -- 31. Next Permutation(下一个排列)


1. 原文

Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.

If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order).

The replacement must be in-place and use only constant extra memory.

Here are some examples. Inputs are in the left-hand column and its corresponding outputs are in the right-hand column.

1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1


2. 翻译

实现“下一个排列”函数,它将给出的排列中的数字按字典序重新排列成下一个更大的排列。

如果这种排列不可能,它将重新排列为最小的可能排列(即按升序排列)。

这种重新排列必须是原地算法,且不能分配额外内存。

下面是一些例子。左侧是输入,右侧是输出。

1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1


3. 分析

一开始看到题目有点迷惑,没有明白题目意思。之后将题目好好读了一遍,才发现这就是一个全排列的问题。

题目的意思是给出一个数组,即一个排列,让我们输出这个排列的下一个更大的排列(按字典序)。

文字表达还是比较含蓄,下面看一个例子:

1, 2, 3, 4, 5

上面这一串数字,有 5! 种排列,比如:1, 2, 3, 4, 5;1, 2, 3, 5, 4等等。那么题意是什么意思呢?题意就是说,我现在给一个数组:1, 2, 3, 5, 4,你现在给我输出这个数组(即这个排列)的下一个数组(即下一个排列),但是要求是按字典序,且要比给定的大。

这里先给出答案:1, 2, 4, 3, 5。

首先,按正常的排列思维,我们将其所有的排列从小到大写出,就会得出这个结果。但是如何用代码将这个思路表示出来呢?

首先,不考虑时间空间的情况下,直接用暴力求解就是将所有排列求出来,然后去遍历寻找所求的排列,这在前提条件下是可以的。但是题目明确要求了原地算法,所以一切需要申请内存的算法都是失败的,还有一点就是暴力求解法的时间复杂度问题,太高了。

仔细看看 1, 2,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值