📌  相关文章
📜  按字典顺序排列的字符串的第 n 个排列

📅  最后修改于: 2022-05-13 01:57:07.880000             🧑  作者: Mango

按字典顺序排列的字符串的第 n 个排列

给定一个长度为 m 的字符串,只包含小写字母。您必须按字典顺序找到字符串的第 n 个排列。

例子:

Input : str[] = "abc", n = 3
Output : Result = "bac"
Explanation : All possible permutation in
sorted order: abc, acb, bac, bca, cab, cba

Input : str[] = "aba", n = 2
Output : Result = "aba"
Explanation : All possible permutation
in sorted order: aab, aba, baa

先决条件:使用 STL 对给定字符串进行排列

打印第 n 个排列背后的想法非常简单,我们应该使用 STL(在上面的链接中解释)来查找下一个排列并一直执行到第 n 个排列。在第 n 次迭代之后,我们应该退出循环,然后打印我们的第 n 次排列的字符串。

long int i = 1;
    do
    {
        // check for nth iteration
        if (i == n)
            break;
       i++; // keep incrementing the iteration
    } while (next_permutation(str.begin(), str.end()));

    // print string after nth iteration
   print str;
C++
// C++ program to print nth permutation with
// using next_permute()
#include 
using namespace std;
  
// Function to print nth permutation
// using next_permute()
void nPermute(string str, long int n)
{
    // Sort the string in lexicographically
    // ascending order
    sort(str.begin(), str.end());
  
    // Keep iterating until
    // we reach nth position
    long int i = 1;
    do {
        // check for nth iteration
        if (i == n)
            break;
  
        i++;
    } while (next_permutation(str.begin(), str.end()));
  
    // print string after nth iteration
    cout << str;
}
  
// Driver code
int main()
{
    string str = "GEEKSFORGEEKS";
    long int n = 100;
    nPermute(str, n);
    return 0;
}


Java
// Java program to print nth permutation with
// using next_permute()
import java.util.*;
  
class GFG 
{
  
// Function to print nth permutation
// using next_permute()
static void nPermute(char[] str, int n)
{
    // Sort the string in lexicographically
    // ascending order
    Arrays.sort(str);
  
    // Keep iterating until
    // we reach nth position
    int i = 1;
    do {
        // check for nth iteration
        if (i == n)
            break;
  
        i++;
    } while (next_permutation(str));
  
    // print string after nth iteration
    System.out.println(String.valueOf(str));
}
  
static boolean next_permutation(char[] p)
{
    for (int a = p.length - 2; a >= 0; --a)
        if (p[a] < p[a + 1])
        for (int b = p.length - 1;; --b)
            if (p[b] > p[a]) 
            {
                char t = p[a];
                p[a] = p[b];
                p[b] = t;
                for (++a, b = p.length - 1; a < b; ++a, --b)
                {
                    t = p[a];
                    p[a] = p[b];
                    p[b] = t;
                }
                return true;
            }
    return false;
} 
  
// Driver code
public static void main(String[] args) 
{
    String str = "GEEKSFORGEEKS";
    int n = 100;
    nPermute(str.toCharArray(), n);
}
}
  
// This code contributed by Rajput-Ji


Python3
# Python3 program to print nth permutation 
# with using next_permute()
  
# next_permutation method implementation
def next_permutation(L):
    n = len(L)
    i = n - 2
    while i >= 0 and L[i] >= L[i + 1]:
        i -= 1
  
    if i == -1:
        return False
  
    j = i + 1
    while j < n and L[j] > L[i]:
        j += 1
    j -= 1
  
    L[i], L[j] = L[j], L[i]
  
    left = i + 1
    right = n - 1
  
    while left < right:
        L[left], L[right] = L[right], L[left]
        left += 1
        right -= 1
  
    return True
  
# Function to print nth permutation
# using next_permute()
def nPermute(string, n):
    string = list(string)
    new_string = []
  
    # Sort the string in lexicographically
    # ascending order
    string.sort()
    j = 2
  
    # Keep iterating until
    # we reach nth position
    while next_permutation(string):
        new_string = string
  
        # check for nth iteration
        if j == n:
            break
        j += 1
  
    # print string after nth iteration
    print(''.join(new_string))
  
# Driver Code
if __name__ == "__main__":
    string = "GEEKSFORGEEKS"
    n = 100
    nPermute(string, n)
  
# This code is contributed by
# sanjeev2552


C#
// C# program to print nth permutation with 
// using next_permute()
using System;
  
class GFG 
{ 
  
// Function to print nth permutation 
// using next_permute() 
static void nPermute(char[] str, int n) 
{ 
    // Sort the string in lexicographically 
    // ascending order 
    Array.Sort(str); 
  
    // Keep iterating until 
    // we reach nth position 
    int i = 1; 
    do 
    { 
        // check for nth iteration 
        if (i == n) 
            break; 
  
        i++; 
    } while (next_permutation(str)); 
  
    // print string after nth iteration 
    Console.WriteLine(String.Join("",str)); 
} 
  
static bool next_permutation(char[] p) 
{ 
    for (int a = p.Length - 2; a >= 0; --a) 
        if (p[a] < p[a + 1]) 
        for (int b = p.Length - 1;; --b) 
            if (p[b] > p[a]) 
            { 
                char t = p[a]; 
                p[a] = p[b]; 
                p[b] = t; 
                for (++a, b = p.Length - 1; a < b; ++a, --b) 
                { 
                    t = p[a]; 
                    p[a] = p[b]; 
                    p[b] = t; 
                } 
                return true; 
            } 
    return false; 
} 
  
// Driver code 
public static void Main() 
{ 
    String str = "GEEKSFORGEEKS"; 
    int n = 100; 
    nPermute(str.ToCharArray(), n); 
} 
} 
  
/* This code contributed by PrinciRaj1992 */


输出:

EEEEFGGRKSOSK

查找字符串的第 n 个字典排列 |设置 2