zoukankan      html  css  js  c++  java
  • LeetCode 566 Reshape the Matrix

    题目:

    In MATLAB, there is a very useful function called 'reshape', which can reshape a matrix into a new one with different size but keep its original data.

    You're given a matrix represented by a two-dimensional array, and two positive integers r and c representing the row number and column number of the wanted reshaped matrix, respectively.

    The reshaped matrix need to be filled with all the elements of the original matrix in the same row-traversing order as they were.

    If the 'reshape' operation with given parameters is possible and legal, output the new reshaped matrix; Otherwise, output the original matrix.

    Example 1:

    Input: 
    nums = 
    [[1,2],
     [3,4]]
    r = 1, c = 4
    Output: 
    [[1,2,3,4]]
    Explanation:
    The row-traversing of nums is [1,2,3,4]. The new reshaped matrix is a 1 * 4 matrix, fill it row by row by using the previous list.

    Example 2:

    Input: 
    nums = 
    [[1,2],
     [3,4]]
    r = 2, c = 4
    Output: 
    [[1,2],
     [3,4]]
    Explanation:
    There is no way to reshape a 2 * 2 matrix to a 2 * 4 matrix. So output the original matrix.

    Note:

      1. The height and width of the given matrix is in range [1, 100].
      2. The given r and c are all positive.

    分析:

    提交:

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

    结果:

    略作修改,二次提交:

    class Solution {
        public int[][] matrixReshape(int[][] nums, int r, int c) {
            int m=nums.length;
            int n=nums[0].length;
            
            if(r*c != m*n) {
                return nums;
            }
                
           int[] array = new int[m*n];
           for(int i=0; i<m; i++) {
               for(int j=0; j<n; j++) {
                   array[i*n+j] = nums[i][j];
               }
           }
           
           int[][] newMatrix = new int[r][c];
           for(int i=0; i<r; i++){
               for(int j=0; j<c; j++) {
                   newMatrix[i][j] = array[i*c+j];
               }
           }
           
           
          /* int[][] newMatrix = new int[r][c];
           for(int i=0; i<r; i++){
               for(int j=0; j<c; j++) {
                   newMatrix[i][j] = nums[i]*c+j];
               }
           }
            */
            
           return newMatrix;
    
    
                
       
        }
    }

    结果:

    分析:

    为什么简单的修改会带来很大的执行时间变化?

  • 相关阅读:
    Exchange这东东…
    下午解决了一个问题
    PDC每日视频
    Delphi.net的IDE和C#Builder是相同的
    开始把准备把Exchange的一些基本操作和设置与SharePoint结合起来
    这两天忙得焦头烂额
    一个在.net下进行用户模拟的类
    SharePoint的相关链接
    今天才知有一个CollectionBase类,惭愧
    【博客堂杯征文】从服务员到程序员
  • 原文地址:https://www.cnblogs.com/hzg1981/p/8818298.html
Copyright © 2011-2022 走看看