[英]print all the strings possible of length k from a given string with repition allowed usibg arraylist
[英]Print all possible strings of a given length
給定一個字母字符串和一個數字k,編寫一個函數來打印這些字母的長度k的所有組合。
該字符串不包含重復的字母。
輸入 :
{ 'a', 'b', 'd', 's', 'e' }
預期輸出 :
abd, abs, abe, ads, ade, bds, bde, bse, dse
我正在使用遞歸。
基本情況是int k
為0時,返回前綴。
如果不滿足基本要求,請逐步添加字符數組中的所有字符,然后遞歸調用k = k - 1
。
// Recursive method used to print all possible strings of length k, given a set of characters.
private static void printAllCombinations(char[] alphabet, String prefix, int n, int k) {
// Base case: k is 0,
// print prefix.
if (k == 0) {
System.out.print(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 + alphabet[i];
// k is decreased, because
// we have added a new character.
printAllCombinations(alphabet, newPrefix, n, k - 1);
}
}
實際輸出 : aaa aab aad aas aae aba abb abd abs abe ada adb add ads ade asa asb asd ass ase aea aeb aed aes aee baa bab bad bas bae bba bbb bbd bbs bbe bda bdb bdd bds bde bsa bsb bsd bss bse bea beb bed bes bee daa dab dad das dae dba dbb dbd dbs dbe dda ddb ddd dds dde dsa dsb dsd dss dse dea deb ded des dee saa sab sad sas sae sba sbb sbd sbs sbe sda sdb sdd sds sde ssa ssb ssd sss sse sea seb sed ses see eaa eab ead eas eae eba ebb ebd ebs ebe eda edb edd eds ede esa esb esd ess ese eea eeb eed ees eee
我可以做些什么來獲得所需的輸出?
我知道我的函數printAllCombinations
實際上可以正常工作。 我只是不明白如何實現所需的輸出。
您可以使用n
跟蹤數組alphabets
中的當前位置。
public static void printAllCombinations(char[] alphabet, int k) {
printAllCombinations(alphabet, "", 0, k);
}
private static void printAllCombinations(char[] alphabet, String prefix, int n, int k) {
if (k == 0) { //base case unchanged
System.out.print(prefix + " ");
return;
}
for (int i = n; i < alphabet.length; i++) { //loop only from n to end of array
String newPrefix = prefix + alphabet[i];
printAllCombinations(alphabet, newPrefix, i + 1, k - 1);
}
}
輸出: abd abs abe ads ade ase bds bde bse dse
如果要在除第一個元素之外的每個元素前都使用逗號,則可以將基本情況更改為:
if (k == 0) {
if (n > prefix.length()) {
System.out.print(", ");
}
System.out.print(prefix);
return;
}
將輸出: abd, abs, abe, ads, ade, ase, bds, bde, bse, dse
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.