0

この問題を考慮してスパイラル マトリックスを生成しようとしています。整数 n を指定すると、1 から n の 2 乗までの要素で満たされた正方マトリックスをスパイラル オーダーで生成します。たとえば、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;
}
4

1 に答える 1