• 重塑矩阵


    1. 此博客链接:https://www.cnblogs.com/ping2yingshi/p/14409197.html

    重塑矩阵

    题目链接:https://leetcode-cn.com/problems/reshape-the-matrix/submissions/

    题目

    在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 都是正数

    题解

    新矩阵的长度应该和原来矩阵的长度相同,才能把原来的矩阵变成新矩阵。行乘以列的乘积等于矩阵的长度。新矩阵相对于原来矩阵可以有两种变换,第一种是把行变多,相应的列就少;第二种是把行变少,相应的列就多。

    方法:

    1.先计算原来矩阵的行和列。

    2.双重循环遍历新的矩形行和列。

    3.判断新的矩形是把行变成还是变短,把原来矩阵相应位置的元素赋值给新矩阵。

    代码

    class Solution {
        public int[][] matrixReshape(int[][] nums, int r, int c) {
            int row=nums.length;
            int col=nums[0].length;
            if(row*col!=r*c)   
            {
                return nums;
            }
            int ans[][]=new int[r][c];
            int m=0;
            int n=0;
            for(int i=0;i<r;i++)
            {
                for(int j=0;j<c;j++)
                {
                    if(row>r)
                    {
                        if(n<col)
                        {
                           ans[i][j]=nums[m][n];
                           n=n+1;
                        }
                           
                        else{
                            m=m+1;
                            n=0;
                            ans[i][j]=nums[m][n];
                            n=n+1;
                        }
                    }
                    else{
                         if(n<col)
                         {
                             ans[i][j]=nums[m][n]; 
                             n=n+1;
                         }
                         else{
                            m=m+1;
                            n=0;
                            ans[i][j]=nums[m][n];
                            n=n+1;
                         }
                    }
    
                }
            }
            return ans;
        }
    }

    结果

    出来混总是要还的
  • 相关阅读:
    json2.js和wcf传递Date对象问题
    使用WebClient发送POST请求
    我也质疑下petshop
    sql server 2005 游标使用小例
    关于SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY
    小错误大麻烦
    SQL Server启动出现“指定的服务未安装”的解决方法
    非常不错的一个网站
    objectdatasource 未能找到带参数的非泛型方法
    SQLServer日志文件收缩
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/14409197.html
Copyright © 2020-2023  润新知