LeetCode 566 重塑矩阵 Java实现

LeetCode566
LeetCode 566 重塑矩阵 Java实现_第1张图片

题目

在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]]
解释:
没有办法将 2 * 2 矩阵转化为 2 * 4 矩阵。 所以输出原矩阵。

代码

class Solution {
     
    public int[][] matrixReshape(int[][] nums, int r, int c) {
     
        Queue<Integer> queue = new LinkedList<>();
        //用队列来存储输入的元素 遵循的规则是先进先出
        //offer    poll
        int[][] ans = new int[r][c];
        int x = nums.length;
        if(x == 0){
     
            return new int[0][0];
        }
        int y = nums[0].length;
        if(x*y != r * c){
     
            return nums;
        }
        for (int i = 0; i < x; i++){
     
            for(int j = 0; j < y; j++){
     
                queue.offer(nums[i][j]);
            }
        }
        for (int i = 0; i < r; i++){
     
            for(int j = 0; j < c; j++){
     
               // if(queue.peek() == null){
     
                   // return nums;
              //  }
              //peek方法不会删除元素
              //尽量使用offer()方法添加元素,使用poll()方法移除元素(当没有值的时候不会报错会返回null
                ans[i][j] = queue.poll();
            }
        }
        return ans;
    }
}```

你可能感兴趣的:(LeetCode,leetcode,java)