1
+ # V0
2
+
3
+ # V1
4
+ # http://bookshadow.com/weblog/2016/09/09/leetcode-next-permutation/
5
+ class Solution (object ):
6
+ def nextPermutation (self , nums ):
7
+ """
8
+ :type nums: List[int]
9
+ :rtype: void Do not return anything, modify nums in-place instead.
10
+ """
11
+ size = len (nums )
12
+ for x in range (size - 1 , - 1 , - 1 ):
13
+ if nums [x - 1 ] < nums [x ]:
14
+ break
15
+ if x > 0 :
16
+ for y in range (size - 1 , - 1 , - 1 ):
17
+ if nums [y ] > nums [x - 1 ]:
18
+ nums [x - 1 ], nums [y ] = nums [y ], nums [x - 1 ]
19
+ break
20
+ for z in range ((size - x ) / 2 ):
21
+ nums [x + z ], nums [size - z - 1 ] = nums [size - z - 1 ], nums [x + z ]
22
+
23
+ # V1'
24
+ # https://blog.csdn.net/fuxuemingzhu/article/details/82113409
25
+ class Solution (object ):
26
+ def nextPermutation (self , nums ):
27
+ """
28
+ :type nums: List[int]
29
+ :rtype: void Do not return anything, modify nums in-place instead.
30
+ """
31
+ n = len (nums )
32
+ i = n - 1
33
+ while i > 0 and nums [i ] <= nums [i - 1 ]:
34
+ i -= 1
35
+ self .reverse (nums , i , n - 1 )
36
+ if i > 0 :
37
+ for j in range (i , n ):
38
+ if nums [j ] > nums [i - 1 ]:
39
+ self .swap (nums , i - 1 , j )
40
+ break
41
+
42
+ def reverse (self , nums , i , j ):
43
+ """
44
+ contains i and j.
45
+ """
46
+ for k in range (i , (i + j ) / 2 + 1 ):
47
+ self .swap (nums , k , i + j - k )
48
+
49
+
50
+ def swap (self , nums , i , j ):
51
+ """
52
+ contains i and j.
53
+ """
54
+ nums [i ], nums [j ] = nums [j ], nums [i ]
55
+
56
+ # V2
57
+ # Time: O(n)
58
+ # Space: O(1)
59
+ class Solution (object ):
60
+ # @param {integer[]} nums
61
+ # @return {void} Do not return anything, modify nums in-place instead.
62
+ def nextPermutation (self , num ):
63
+ k , l = - 1 , 0
64
+ for i in range (len (num ) - 1 ):
65
+ if num [i ] < num [i + 1 ]:
66
+ k = i
67
+
68
+ if k == - 1 :
69
+ num .reverse ()
70
+ return
71
+
72
+ for i in range (k + 1 , len (num )):
73
+ if num [i ] > num [k ]:
74
+ l = i
75
+ num [k ], num [l ] = num [l ], num [k ]
76
+ num [k + 1 :] = num [:k :- 1 ]
0 commit comments