重塑矩阵

来源于力扣566
在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据。
给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。
重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。
如果具有给定参数的reshape操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。
示例1:
输入:
nums =
[[1,2],[3,4] ]
r =1,c=4
输出:
[[1,2,3,4] ]
解释:
行遍历nums的结果是[1,2,3,4]。 新的矩阵是1*4矩阵,用之前的元素值一行一行填充新矩阵。

示例2:
输入:
nums =
[[1,2],[3,4] ]
r= 2,c=4
输出:
[[1,2],[3,4] ]
解释:
没有办法将22矩阵转化为24矩阵。所以输出原矩阵。
思路:
先把二维数组的元素放到一维数组中,判断二维数组元素的个数与r*c的积比较,如果不相等,输出原数组;如果相等,把一维数组的元素依次放到二维数组中即可。
Java代码:

package 面试金典;

public class test009 {

	public static void main(String[] args) {
		int[][] arr= {{1,2},{3,4}};
		int r=1,c=4;
	    //System.out.println(arr.length);//行
		//System.out.println(arr[0].length);//列
		int[][] num=matrixReshape(arr,r,c);
		for(int i=0;i<num.length;i++) {
			for(int j=0;j<num[0].length;j++) {
				System.out.print(num[i][j]+" ");
			}
			System.out.println();
		}
	}

	public static int[][] matrixReshape(int[][] nums, int r, int c) {
		int k1=nums.length*nums[0].length;//计算二维数组的总元素个数
		int[] array=new int[k1];
		int k=0,s=0;
		for(int i=0;i<nums.length;i++) {
			for(int j=0;j<nums[0].length;j++) {
				array[k++]=nums[i][j];//把二维数组元素的值赋给一维数组
				}
			}		
		int k2=r*c;
		int[][] arr1=new int[r][c];
		if(k1==k2) {
			for(int i=0;i<r;i++) {
				for(int j=0;j<c;j++) {
					arr1[i][j]=array[s++];//把一维数组元素的值赋给二维数组
					}
				}
			return arr1;//返回新数组
		}
		return nums;//返回原数组
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值