给定两个整数N和K ,任务是从字典上找到长度为N的第K个字符串。如果长度为N的可能字符串的数量小于K ,则打印-1 。
例子:
Input: N = 3, K = 10
Output: “aaj”
Explanation: The 10th string in the lexicographical order starting from “aaa” is “aaj”.
Input: N = 2, K = 1000
Output: -1
Explanation: A total of 26*26 = 676 strings of length 2 are possible. So the output will be -1.
方法:
下面是上述方法的实现:
C++
// C++ program to find the K-th
// lexicographical string of length N
#include
using namespace std;
string find_kth_String_of_n(int n, int k)
{
// Initialize the array to store
// the base 26 representation of
// K with all zeroes, that is,
// the initial String consists
// of N a's
int d[n] = {0};
// Start filling all the
// N slots for the base 26
// representation of K
for(int i = n - 1; i > -1; i--)
{
// Store the remainder
d[i] = k % 26;
// Reduce K
k /= 26;
}
// If K is greater than the
// possible number of strings
// that can be represented by
// a string of length N
if (k > 0)
return "-1";
string s = "";
// Store the Kth lexicographical
// string
for(int i = 0; i < n; i++)
s += (d[i] + ('a'));
return s;
}
// Driver Code
int main()
{
int n = 3;
int k = 10;
// Reducing k value by 1 because
// our stored value starts from 0
k -= 1;
cout << find_kth_String_of_n(n, k);
return 0;
}
// This code is contributed by 29AjayKumar
Java
// Java program to find the
// K-th lexicographical String
// of length N
class GFG{
static String find_kth_String_of_n(int n, int k)
{
// Initialize the array to
// store the base 26
// representation of K
// with all zeroes, that is,
// the initial String consists
// of N a's
int[] d = new int[n];
// Start filling all the
// N slots for the base 26
// representation of K
for (int i = n - 1; i > -1; i--)
{
// Store the remainder
d[i] = k % 26;
// Reduce K
k /= 26;
}
// If K is greater than the
// possible number of Strings
// that can be represented by
// a String of length N
if (k > 0)
return "-1";
String s = "";
// Store the Kth lexicographical
// String
for (int i = 0; i < n; i++)
s += (char)(d[i] + ('a'));
return s;
}
public static void main(String[] args)
{
int n = 3;
int k = 10;
// Reducing k value by 1 because
// our stored value starts from 0
k -= 1;
System.out.println(find_kth_String_of_n(n, k));
}
}
// This code is contributed by PrinciRaj1992
Python3
# Python program to find the
# K-th lexicographical string
# of length N
def find_kth_string_of_n(n, k):
# Initialize the array to
# store the base 26
# representation of K
# with all zeroes, that is,
# the initial string consists
# of N a's
d =[0 for i in range(n)]
# Start filling all the
# N slots for the base 26
# representation of K
for i in range(n - 1, -1, -1):
# Store the remainder
d[i]= k % 26
# Reduce K
k//= 26
# If K is greater than the
# possible number of strings
# that can be represented by
# a string of length N
if k>0:
return -1
s =""
# Store the Kth lexicographical
# string
for i in range(n):
s+= chr(d[i]+ord('a'))
return s
n = 3
k = 10
# Reducing k value by 1 because
# our stored value starts from 0
k-= 1
print(find_kth_string_of_n(n, k))
C#
// C# program to find the
// K-th lexicographical String
// of length N
using System;
class GFG{
static String find_kth_String_of_n(int n, int k)
{
// Initialize the array to
// store the base 26
// representation of K
// with all zeroes, that is,
// the initial String consists
// of N a's
int[] d = new int[n];
// Start filling all the
// N slots for the base 26
// representation of K
for (int i = n - 1; i > -1; i--)
{
// Store the remainder
d[i] = k % 26;
// Reduce K
k /= 26;
}
// If K is greater than the
// possible number of Strings
// that can be represented by
// a String of length N
if (k > 0)
return "-1";
string s = "";
// Store the Kth lexicographical
// String
for (int i = 0; i < n; i++)
s += (char)(d[i] + ('a'));
return s;
}
// Driver Code
public static void Main()
{
int n = 3;
int k = 10;
// Reducing k value by 1 because
// our stored value starts from 0
k -= 1;
Console.Write(find_kth_String_of_n(n, k));
}
}
// This code is contributed by Code_Mech
输出:
aaj
时间复杂度: O(N)