您的位置:首页 > 编程语言 > Java开发

LeetCode566——Reshape the Matrix

2017-09-12 19:59 399 查看
题意

将一个矩阵转换成指定行列数的新矩阵,若原矩阵元素数目与新矩阵数目不等,则返回新矩阵。

代码

方法一:将原矩阵中的元素依次取出同时放入新矩阵。

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 移除并返回队列头部的元素
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode java