1. 程式人生 > >leet (Reshape the Matrix)

leet (Reshape the Matrix)

Title:Reshape the Matrix    566

Difficulty:Easy

原題leetcode地址:https://leetcode.com/problems/array-partition-i/

 

1. 採用了一位陣列作為中間的過度,先將原來的二維陣列儲存到過度的一維陣列中,然後將過度的一維陣列儲存到二維陣列中

時間複雜度:O(n^2),巢狀遍歷。

空間複雜度:O(n),申請的最長空間長度為r * c。

    /**
     * 採用了一位陣列作為中間的過度,先將原來的二維陣列儲存到過度的一維陣列中,然後將過度的一維陣列儲存到二維陣列中
     * @param nums
     * @param r
     * @param c
     * @return
     */
    public static int[][] matrixReshape(int[][] nums, int r, int c) {

        int row = nums.length;
        int column = nums[0].length;
        if (r * c != row * column) {
            return nums;
        }

        int k = 0;
        int tmp[] = new int[row * column];
        int result[][] = new int[r][c];

        for(int i = 0; i < row; i++) {
            for(int j = 0; j < column; j++) {
                tmp[k++] = nums[i][j];
            }
        }

        int kk = 0;
        for(int i = 0; i < r; i++) {
            for(int j = 0; j < c; j++) {
                result[i][j] = tmp[kk++];
            }
        }

        return result;

    }

2.整除為行,求餘為列

時間複雜度:O(n),一次一層遍歷,最長遍歷為r * c。

空間複雜度:O(n),申請的最長空間長度為r * c。

    /**
     * 整除為行,求餘為列
     * @param nums
     * @param r
     * @param c
     * @return
     */
    public static int[][] matrixReshape1(int[][] nums, int r, int c) {

        int row = nums.length;
        int column = nums[0].length;
        if (r * c != row * column) {
            return nums;
        }

        int result[][] = new int[r][c];

        for(int i = 0; i < r * c; i++) {
            result[i / c][i % c] = nums[i / column][i % column];
        }

        return result;

    }