题目:重塑矩阵
给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的行遍历顺序填充。
过程
读过题我们可以知道,该题是让我们将二维数组 映射成一个一维数组或者将这个一维数组映射成 r 行 c 列的二维数组。根据题意我们首先提取原矩阵的行列数与要转变的行列数进行比较,判定这样变化是否合理,不合理仍然返回原矩阵,如果合理则创建一个新的二维数组,对原来矩阵中的数据以相同的顺序进行遍历填充.
代码
代码如下(示例):
public class ChongGouJuZhen {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int q = sc.nextInt();
int w = sc.nextInt();
int r = sc.nextInt();
int c = sc.nextInt();
int[][] fir = new int[q][w];
ChongGouJuZhen cg = new ChongGouJuZhen();
cg.ReShape(fir,r,c);
}
public int[][] ReShape(int[][] fir,int r,int c){
//获取二维数组的行列数
int a = fir.length;
int b = fir[0].length;
//与r行c列进行比较,确定是否合理
if (a * b != r*c){
return fir;
}
//创建一个新的数组
int[][] sec = new int[r][c];
//将原数组数据以相同顺序进行填充
for (int x = 0;x< a * b; x++){
sec[x/c][x%c] = fir[x/b][x%b];
}
for (int i = 0;i<r;i++){
for (int j = 0;j<c;j++){
System.out.print(sec[i][j] + " ");
}
System.out.println();
}
//返回新排列的矩阵
return sec;
}
}