java仿照MATLAB中的reshape,实现矩阵重塑

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qfashly/article/details/79852357

在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。
给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。
如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。

这里写图片描述

public static int[][] matrixReshape(int[][] nums, int r, int c) {
        if(nums == null){
            return nums;
        }
        if(r == 0 || c == 0){
            return nums;
        }
        int row = 0;//行
        int columns = 0;//列
        columns = nums[0].length;
        row = nums.length;
        if(columns > 100 || row > 100 || columns < 1 || row < 1){
            return nums;
        }
        if(columns * row < r * c){
            return nums;
        }
        int [][]result = new int[r][c];
        int rr = 0;
        int cc = 0;
        int index = 0;
        for(int i = 0; i < row; i ++){
            for(int j = 0; j < columns; j ++){
                index = i * columns + j + 1;
                if(index > r * c){
                    break;
                }
                rr = index / c;//行
                cc = index % c;//列
                if(rr > 0 && cc ==0){
                    rr = rr -1;
                    cc = c - 1;
                }else if(rr > 0 && cc > 0){
                    cc = cc -1;
                }else{
                    cc = cc -1;
                }
                result[rr][cc] = nums[i][j];
            }
        }
        return result;
    }

猜你喜欢

转载自blog.csdn.net/qfashly/article/details/79852357