簡體   English   中英

Java遞歸生成字符串-所有1以及1和0

[英]Java Generating Strings Recursively - All 1s then 1 and 0

大家好,我試圖通過制作一個遞歸生成ArrayList String的程序來降低遞歸的概念。 我的基本算法是:

public static ArrayList<String> generateListOfAll1sStrings(int maxBits)

終端條件:如果maxBits為1,則返回最簡單的情況:僅包含“ 1”的列表

否則:遞歸地調用generateListOfAll1sStrings()以獲取下一個最小的位長,保存返回的列表,以找到該列表中最長的字符串,並創建一個附加了“ 1”的新字符串(使下一個最長的字符串)返回一個新列表,其中包含較短列表的所有元素以及剛剛添加的新字符串。

到目前為止,我的代碼是:

    package bincomb.model;

    import java.util.ArrayList;

    public class BinaryCombinationGenerator {

public static ArrayList<String> generateListOfAll1sStrings(int maxBits) {
    String string = null;
    ArrayList<String> listofJust1 = new ArrayList<String>();
    ArrayList<String> otherArray = new ArrayList<String>();
    int i = 1;


    if (maxBits == 1) {
        listofJust1.add("1");
        return listofJust1;
    }

    if (maxBits > 1) {
        for (String string2 : listofJust1) {
            String comp = "";
            if (!(comp.equals(string2))) {
                comp = string2;
            }
            string = comp;
        }
        listofJust1.add(i, (string + "1"));
        i++;
        listofJust1 = BinaryCombinationGenerator.generateListOfAll1sStrings((maxBits-1));

        System.out.println(listofJust1);
        return listofJust1;
    }

    return listofJust1;
}

public static void main(String[] args) {
    generateListOfAll1sStrings(10);
}

}

但是,目前,我正在返回IndexOutOfBoundsException 我認為我的for循環引起了問題,但是我不確定如何解決它。

您在此行listofJust1.add(i, (string + "1"));收到java.lang.IndexOutOfBoundsException listofJust1.add(i, (string + "1"));

這是因為方法list.add(index,objects)嘗試將對象添加到索引“ 1”,但是您的數組有0個元素。

要么將其更改為listofJust1.add(i-1, (string + "1")); 或者只是listofJust1.add((string + "1"));

@編輯:在這里:

listofJust1.add(i, (string + "1"));

您想為當前(N)級遞歸添加字符串,但在下面用以下命令替換此數組:

listofJust1 = BinaryCombinationGenerator.generateListOfAll1sStrings((maxBits-1));

基本上說“獲取(maxBits-1)的結果並用listofJust1替換”,因此您將丟失之前添加的內容。

相反,您應該首先獲取級別N-1的列表,然后添加當前級別的字符串:

listofJust1 = BinaryCombinationGenerator.generateListOfAll1sStrings((maxBits-1));
listofJust1.add(stringForThisLevel);

另外,您還需要重新思考如何在N級計算“字符串”,這似乎不正確。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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