leetcode31: Next Permutation python3 找规律

1Next Permutation是什么

pre permutation 和 Next Permutation 是c++中的实现全排列前一个和下一个的函数。

排序是按照字典序,字典序,就是字符小的在前,这样数值小。

参考:

http://www.cnblogs.com/grandyang/p/4428207.html

我理解了字典序就是:

123---》132

说明从后面数,开始降序的那个元素,'2' 选出来,在从后找比2大的数,是'3',然后交换两者,如果两个index之间还有数就reverse。

再看一个例子:a数组

1  2  7  4  3      3  1

1  3  7  4  3       2  1

1  3  1  2  3       4  7

1   从后往前index,开始降序是a[1]=2 ,记下index=1, 然后从后往前找比a[1]大的,一定是在 [1:end]这个范围,因为你之前找降序的时候就约定了肯定有比这个大的。

2   a[5]=3,比2大 和a[1] 交换

3  对index+1进行reverse。这里用双指针的方法,

本来想对奇数个偶数个,区别下,发现都是一个函数

问题:如果pre permutation?更改的地方  

1   从后往前index,开始升序的

2从后往前找比a[index]小的,然后交换

3 reverse

自己手敲下,运行下看看,

class Solution:
    def nextPermutation(self, nums):
        #121 543321
        # 倒数,寻找第一个下降的1  和 之前上升没生过他的的下一个,胜过了
        ##pre pernutation的方法
        #倒数,第一个上升的, 213---》132.  2和倒数比他大的交换,
        #然后2之前的各位,从中间交换
        if not nums or len(nums)==1:return nums
        j=len(nums)-1
        while j>0:
            if nums[j-1]>=nums[j]:
                j-=1
            else:break
        #判断是不是最后一个
        if j!=0:
            for i in range(len(nums)-1,j-1,-1):#
                if nums[j-1][1,2,3]
print(pp.nextPermutation([3,2,1]))

Runtime: 44 ms, faster than 99.84% of Python3 online submissions for Next Permutation.

显摆下,估计leetcode没有用python写的(逃~)

参考java的:

https://leetcode.com/problems/next-permutation/discuss/13865/Sharing-my-clean-and-easy-understand-java-code-with-explanation

你可能感兴趣的:(2,leetcode,算法,全排列,python)