Bootstrap

【Leetcode 566】【Easy】重塑矩阵

目录

题目描述

整体思路

具体代码


题目描述:
 

原题链接

整体思路

首先要确保重塑后的矩阵内元素个数和原矩阵元素个数要相同,如果不同则原样返回原矩阵。

按行遍历顺序遍历原矩阵,设一个临时vector<int>存放新矩阵的每一行的元素,一边遍历一边判断临时vector的元素个数是否等于新矩阵每一行的元素个数,若相等,则说明新矩阵一行已完成,要读下一行,把临时vector元素清空同时新矩阵行数r要-1。若不相等,说明新矩阵的一行的元素还没读完,要继续往临时vector添加原矩阵元素。重复上述步骤知道新矩阵行数r=0。

具体代码

class Solution {
public:
    vector<vector<int>> matrixReshape(vector<vector<int>>& mat, int r, int c) {
        if(r*c!=mat.size()*mat[0].size()) return mat;
        vector<vector<int>> v;
        vector<int> v2;
        for(int i=0;i<=mat.size()-1;i++){
            for(int j=0;j<=mat[0].size()-1;j++){
                if(r==0) break;
                if(v2.size()==c){
                    v.push_back(v2);
                    v2=vector<int>();//清空临时矩阵
                    v2.push_back(mat[i][j]);//别忘了要往临时矩阵添加本次遍历到的原矩阵元素,弄,否则会漏
                    r--;
                }else{
                    v2.push_back(mat[i][j]);
                }
            }
        }
        if(v2.size()==c){//特殊情况是r=0但是临时vector还未存入新矩阵,特殊处理
            v.push_back(v2);
        }
        return v;
    }
};

 

;