给定一组字符和一个正整数k,请打印可以从给定组形成的所有可能的长度为k的字符串。
例子:
Input:
set[] = {'a', 'b'}, k = 3
Output:
aaa
aab
aba
abb
baa
bab
bba
bbb
Input:
set[] = {'a', 'b', 'c', 'd'}, k = 1
Output:
a
b
c
d
对于给定的大小为n的集合,将存在n个k个长度为k的字符串。这个想法是从一个空的输出字符串的(在下面的代码中我们称其为前缀)。将所有字符一一添加到prefix 。对于每个添加的字符,通过递归调用k等于k-1来打印具有当前前缀的所有可能的字符串。
下面是上述想法的实现:
C++
// C++ program to print all
// possible strings of length k
#include
using namespace std;
// The main recursive method
// to print all possible
// strings of length k
void printAllKLengthRec(char set[], string prefix,
int n, int k)
{
// Base case: k is 0,
// print prefix
if (k == 0)
{
cout << (prefix) << endl;
return;
}
// One by one add all characters
// from set and recursively
// call for k equals to k-1
for (int i = 0; i < n; i++)
{
string newPrefix;
// Next character of input added
newPrefix = prefix + set[i];
// k is decreased, because
// we have added a new character
printAllKLengthRec(set, newPrefix, n, k - 1);
}
}
void printAllKLength(char set[], int k,int n)
{
printAllKLengthRec(set, "", n, k);
}
// Driver Code
int main()
{
cout << "First Test" << endl;
char set1[] = {'a', 'b'};
int k = 3;
printAllKLength(set1, k, 2);
cout << "Second Test\n";
char set2[] = {'a', 'b', 'c', 'd'};
k = 1;
printAllKLength(set2, k, 4);
}
// This code is contributed
// by Mohit kumar
Java
// Java program to print all
// possible strings of length k
class GFG {
// The method that prints all
// possible strings of length k.
// It is mainly a wrapper over
// recursive function printAllKLengthRec()
static void printAllKLength(char[] set, int k)
{
int n = set.length;
printAllKLengthRec(set, "", n, k);
}
// The main recursive method
// to print all possible
// strings of length k
static void printAllKLengthRec(char[] set,
String prefix,
int n, int k)
{
// Base case: k is 0,
// print prefix
if (k == 0)
{
System.out.println(prefix);
return;
}
// One by one add all characters
// from set and recursively
// call for k equals to k-1
for (int i = 0; i < n; ++i)
{
// Next character of input added
String newPrefix = prefix + set[i];
// k is decreased, because
// we have added a new character
printAllKLengthRec(set, newPrefix,
n, k - 1);
}
}
// Driver Code
public static void main(String[] args)
{
System.out.println("First Test");
char[] set1 = {'a', 'b'};
int k = 3;
printAllKLength(set1, k);
System.out.println("\nSecond Test");
char[] set2 = {'a', 'b', 'c', 'd'};
k = 1;
printAllKLength(set2, k);
}
}
Python 3
# Python 3 program to print all
# possible strings of length k
# The method that prints all
# possible strings of length k.
# It is mainly a wrapper over
# recursive function printAllKLengthRec()
def printAllKLength(set, k):
n = len(set)
printAllKLengthRec(set, "", n, k)
# The main recursive method
# to print all possible
# strings of length k
def printAllKLengthRec(set, prefix, n, k):
# Base case: k is 0,
# print prefix
if (k == 0) :
print(prefix)
return
# One by one add all characters
# from set and recursively
# call for k equals to k-1
for i in range(n):
# Next character of input added
newPrefix = prefix + set[i]
# k is decreased, because
# we have added a new character
printAllKLengthRec(set, newPrefix, n, k - 1)
# Driver Code
if __name__ == "__main__":
print("First Test")
set1 = ['a', 'b']
k = 3
printAllKLength(set1, k)
print("\nSecond Test")
set2 = ['a', 'b', 'c', 'd']
k = 1
printAllKLength(set2, k)
# This code is contributed
# by ChitraNayal
C#
// C# program to print all
// possible strings of length k
using System;
class GFG {
// The method that prints all
// possible strings of length k.
// It is mainly a wrapper over
// recursive function printAllKLengthRec()
static void printAllKLength(char[] set, int k)
{
int n = set.Length;
printAllKLengthRec(set, "", n, k);
}
// The main recursive method
// to print all possible
// strings of length k
static void printAllKLengthRec(char[] set,
String prefix,
int n, int k)
{
// Base case: k is 0,
// print prefix
if (k == 0)
{
Console.WriteLine(prefix);
return;
}
// One by one add all characters
// from set and recursively
// call for k equals to k-1
for (int i = 0; i < n; ++i)
{
// Next character of input added
String newPrefix = prefix + set[i];
// k is decreased, because
// we have added a new character
printAllKLengthRec(set, newPrefix,
n, k - 1);
}
}
// Driver Code
static public void Main ()
{
Console.WriteLine("First Test");
char[] set1 = {'a', 'b'};
int k = 3;
printAllKLength(set1, k);
Console.WriteLine("\nSecond Test");
char[] set2 = {'a', 'b', 'c', 'd'};
k = 1;
printAllKLength(set2, k);
}
}
// This code is contributed by Ajit.
Javascript
输出:
First Test
aaa
aab
aba
abb
baa
bab
bba
bbb
Second Test
a
b
c
d