簡體   English   中英

打印給定長度的所有可能的字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM