59. Spiral Matrix II

Given an integern, generate a square matrix filled with elements from 1 ton2in spiral order.

For example,
Givenn=3,

You should return the following matrix:[

 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]

思路:和上一题几乎一样

public class Solution {
    public int[][] generateMatrix(int n) {
        int[][] res = new int[n][n];

        if (n==0){
            return res;
        }

        int left = 0;
        int top = 0;
        int right = n - 1;
        int buttom = n - 1;
        int num = 1;

        while (true){
            for (int i=left;i<=right;i++){
                res[top][i] = num++;
                System.out.println(1+"top="+top+", i="+i+", sum="+res[top][i]);
            }
            top++;
            if (left>right||top>buttom) break;

            for (int i=top;i<=buttom;i++){
                res[i][right] = num++;
                System.out.println(2+"top="+top+", i="+i+", sum="+res[top][i]);
            }
            right--;
            if (left>right||top>buttom) break;

            for (int i=right;i>=left;i--){
                res[buttom][i] = num++;
                System.out.println(3+"top="+top+", i="+i+", sum="+res[top][i]);
            }
            buttom--;
            if (left>right||top>buttom) break;

            for (int i=buttom;i>=top;i--){
                res[i][left] = num++;
                System.out.println(4+"top="+top+", i="+i+", sum="+res[top][i]);
            }
            left++;
            if (left>right||top>buttom) break;
        }

        return res;
    }
}

另一版本code, 思路讲解https://www.youtube.com/watch?v=dfGhf-Ko0L4

public class Solution{
    public int[][] generateMatrix(int n){
        int[][] results = new int[n][n];
        int left = 0;
        int right = n-1;
        int top = 0;
        int buttom = n-1;
        int k = 1;

        while(top < buttom && left < right){
            for(int i = left; i < right; i++){
                results[top][i] = k++;
            }

            for(int i = top; i < buttom; i++){
                results[i][right] = k++;
            }

            for(int i = right; i>left; i--){
                results[buttom][i] = k++;
            }

            for(int i = buttom; i > top; i--){
                results[i][left] = k++;
            }

            top++;
            buttom--;
            left++;
            right--;
        }

        if(n%2 != 0){
            results[n/2][n/2] = k;
        }
        return results;

    }
}

results matching ""

    No results matching ""