Next permutation leetcode python solution

LeetCode has a Medium coding Problem in Its’ Algorithm Section “Next Permutation Leetcode”. Today We are going to solve this problem. LeetCode Link of the Problem is HERE.

Next permutation leetcode python solution

Question

permutation of an array of integers is an arrangement of its members into a sequence or linear order.

  • For example, for arr = [1,2,3], the following are considered permutations of arr[1,2,3][1,3,2][3,1,2][2,3,1].

The next permutation of an array of integers is the next lexicographically greater permutation of its integer. If not feasible, reorganize the array in the lowest order possible (i.e., sorted in ascending order).

  • For example, the next permutation of arr = [1,2,3] is [1,3,2].
  • Similarly, the next permutation of arr = [2,3,1] is [3,1,2].
  • While the next permutation of arr = [3,2,1] is [1,2,3] because [3,2,1] does not have a lexicographical larger rearrangement.

Given an array of integers nums, find the next permutation of nums.

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

Examples

Input: nums = [1,2,3]
Output: [1,3,2]
Input: nums = [3,2,1]
Output: [1,2,3]
Input: nums = [1,1,5]
Output: [1,5,1]

Constraints:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 100

Solution to Next Permutation Leetcode

Given the Skeleton Code given by Leetcode

class Solution(object):
    def nextPermutation(self, nums):
        """
        :type nums: List[int]
        :rtype: None Do not return anything, modify nums in-place instead.
        """
        

Looking forward from the end of the original array, we can see that the number progressively grows higher, then lowers at 2, and then we seek for the first number greater than 2, which is 3, then we swap 2 and 3, and finally we transpose all the numbers after 3.

Complete Solution:

class Solution(object):
    def nextPermutation(self, nums):
        """
        :type nums: List[int]
        :rtype: None Do not return anything, modify nums in-place instead.
        """
        if len(nums) <= 1:
            return
        for i in range(len(nums) - 2, -1, -1):
            if nums[i] < nums[i + 1]:
                for k in range(len(nums) - 1, i, -1):
                    if nums[k] > nums[i]:
                        nums[i], nums[k] = nums[k], nums[i]
                        nums[i+1:] = sorted(nums[i+1:])
                        break
                break
            
            else:
                if i == 0:
                    nums.sort()

READ MORE

Python-related posts Visit HERE

C++ related posts Visit HERE

Databases related posts Visit HERE

Data Structures related posts visit HERE

Algorithms related posts visit HERE

Data Science related posts visit HERE

Permalink

Cannot retrieve contributors at this time

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

class Solution(object):
def nextPermutation(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
#http://fisherlei.blogspot.com/2012/12/leetcode-next-permutation.html
i = j = len(nums)-1
while i > 0 and nums[i]<=nums[i-1]:
i-=1
i-=1
if i<0:
nums.reverse()
return
while j>i and nums[j]<=nums[i]:
j-=1
nums[i],nums[j] = nums[j], nums[i]
k,l = i+1, len(nums)-1
while k<l:
nums[k],nums[l] = nums[l], nums[k]
k+=1
l-=1