zoukankan      html  css  js  c++  java
  • leedcode每日一题: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]]
    解释:
    没有办法将 2 * 2 矩阵转化为 2 * 4 矩阵。 所以输出原矩阵。
    注意:
    给定矩阵的宽和高范围在 [1, 100]。
    给定的 r 和 c 都是正数。

    二、题解
    方法一:利用下标

    class Solution {
        public int[][] matrixReshape(int[][] nums, int r, int c) {
            int rows = nums.length;
            int cols = nums[0].length;
    
            if(rows * cols != r * c) return nums;
    
            int[][] ans = new int[r][c];
            int s = 0,t = 0;
            for(int i = 0;i<r;i++){
                for(int j = 0;j < c;j++){
                    ans[i][j] = nums[s][t];
                    t++;
                    if(t == cols){
                        t = 0;
                        s++;
                    }
                }
            }
            return ans;
        }
    }
    

    方法二:二维数组的一维表示

    class Solution {
    public:
        vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
            int rows = nums.size();
            int cols = nums[0].size();
    
            if(rows * cols != r * c) return nums;
    
            vector<vector<int> > ans(r,vector<int>(c,0));
    
            for(int i=0;i<rows*cols;i++){
                ans[i/c][i%c] = nums[i/cols][i%cols];
            }
            return ans;
        }
    };
    

  • 相关阅读:
    UVA 1025 A Spy in the Metro DP水题
    ZOJ 3814 Sawtooth Puzzle BFS
    ZOJ 3816 Generalized Palindromic Number
    UVA 10859 Placing Lampposts 树形DP
    UVA 11825 Hackers' Crackdown 状压DP
    POJ 2887 Big String 线段树 离线处理
    POJ 1635 Subway tree systems Hash法判断有根树是否同构
    BZOJ 3110 k大数查询 & 树套树
    sdoi 2009 & 状态压缩
    来自于2016.2.24的flag
  • 原文地址:https://www.cnblogs.com/ttzz/p/14408281.html
Copyright © 2011-2022 走看看