簡體   English   中英

使用 ArrayList 的 ArrayList 創建螺旋順序矩陣

[英]Creating a Spiral Order Matrix using ArrayList of ArrayList

鑒於此問題,我正在嘗試生成螺旋矩陣:給定一個整數 n,生成一個方陣,其中以螺旋順序填充從 1 到 n 平方的元素。 例如,給定 n = 4,

我正在嘗試使用 ArrayList 的返回類型來生成矩陣。

我的問題是,每次開始生成時,它都會更新整個矩陣而不是每列每行,最終每行和每列都具有相同的值。

這是我的代碼:

public static ArrayList<ArrayList<Integer>> generateMatrix(int a) {
    ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();

    //to create place holder for each element at the start - 0
    ArrayList<Integer> zero = new ArrayList<Integer>();
    for (int i=0; i<a; i++) {
        zero.add(0);
    }
    for (int i=0; i<a; i++) {
        res.add(zero);
    }

    int numToAdd = 1;
    int top = 0;
    int bottom = a-1;
    int left = 0;
    int right = a-1;


    while (numToAdd <= a*a) {
        for (int i = left; i<= right; i++) {
            res.get(top).set(i, numToAdd);
            numToAdd++;
        }
        top++;

        for (int i = top; i <= bottom; i++) {
            res.get(i).set(right, numToAdd);
            numToAdd++;
        }
        right--;

        for (int i=right; i>=left; i--) {
            res.get(bottom).set(i, numToAdd);
            numToAdd++;
        }
        bottom--;

        for(int i=bottom; i>= top; i--) {
            res.get(i).set(left, numToAdd);
            numToAdd++;
        }
        left++;
    }

    return res;
}

你的問題在這里:

//to create place holder for each element at the start - 0
ArrayList<Integer> zero = new ArrayList<Integer>();
...
for (int i=0; i<a; i++) {
    res.add(zero);
}

基本上,您只創建了一個新的“行” ArrayList ,然后您向res添加了相同的ArrayList a 這意味着每個res.get(n)只是指回同一個ArrayList實例。 也就是說,您的所有“行”最終都是完全相同的ArrayList

您需要為每一行實例化一個新的ArrayList ,例如:

for (int i=0; i<a; i++) {
    // for each row make a *new* arraylist
    ArrayList<Integer> zero = new ArrayList<Integer>();
    // initialize that arraylist
    for (int j=0; j<a; j++) {
        zero.add(0);
    }
    // then add it to the row
    res.add(zero);
}

暫無
暫無

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

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