题意
将一个矩阵转换成指定行列数的新矩阵,若原矩阵元素数目与新矩阵数目不等,则返回新矩阵。
代码
方法一:将原矩阵中的元素依次取出同时放入新矩阵。
public class Solution {
public int[][] matrixReshape(int[][] nums, int r, int c) {
int r_original=nums.length;
int c_original=nums[0].length;
if(r_original*c_original==r*c){
int[][] newArray=new int[r][c];
for(int i=0;i<r_original*c_original;i++){
newArray[i/c][i%c]=nums[i/c_original][i%c_original];
}
return newArray;
}
else return nums;
}
}
此处有两点需要注意:1、通过nums.length确定原矩阵的函数,通过nums[0].length确定原矩阵的列数;
2、通过nums[i/c_original][i%c_original]将原矩阵中的元素依次按行取出。
方法二:先将原矩阵中的元素按行取出放入队列,然后再从队列中存入新矩阵
import java.util.LinkedList;
import java.util.Queue;
public class Solution2 {
public int[][] matrixReshape(int[][] nums, int r, int c){
int r_original=nums.length;
int c_original=nums[0].length;
if(r_original*c_original==r*c) {
Queue <Integer> queue=new LinkedList <> ();
for(int i=0;i<nums.length;i++) {
for(int j=0;j<nums[0].length;j++) {
queue.add(nums[i][j]);
}
}
int[][] result=new int[r][c];
for(int i=0;i<r;i++) {
for(int j=0;j<c;j++) {
result[i][j]=queue.remove();
}
}
return result;
}
else
return nums;
}
}
此方法应该注意的是队列的使用以及
add 在队列尾部增加一个元素
remove 移除并返回队列头部的元素