您的位置:首页 > 其它

Leetcode:Next Permutation

2016-09-27 21:40 246 查看

此题不难,关键思路是找到某一个最大的i->nums[i],使得存在nums[k],k>i,大于nums[i]。然后将nums[i]的值与nums[k]交换后,并对nums[i+1:]排序。为了找到这个i,我们从右往左遍历,当第一个非递增的元素出现时,i就找到了。

但是为了编程方便,我们可以先将nums[i+1:]排序,这样就知道大于nums[i]的最小元素是多少了。

class Solution(object):
def nextPermutation(self, nums):
n = len(nums)
if n<=1:return
i =n-2

while i>=0 and nums[i] >= nums[i+1]:i-=1

if i>=0:
sorts = sorted(nums[i:])
for x in sorts:
if x>nums[i]:nums[i] = x;sorts.remove(x);break
nums[i+1:] = sorts
else:
nums.sort()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: