LeetCode - 566. Reshape the Matrix (C++) O(n)


1. 題目大意

根據給定矩陣,重塑一個矩陣,r是所求矩陣的行數,c是所求矩陣的列數。如果給定矩陣和所求矩陣的數據個數不一樣,那么返回原矩陣。否則,重塑矩陣。其中兩個矩陣中的數據順序不變(先行后列)。

2. 思路

由於矩陣中數據順序不變,因此我們考慮按順序做。原矩陣中的第i行第j列(從0開始)的數據可以記為第k個數,其中k=i*(原矩陣中的列數)+j。對應的是新產生的矩陣中的第k/c行,k%c列的元素。一一賦值。這題的關鍵是要小心數組的邊界,正確找到對應的位置。

3. 代碼

class Solution {
public:
    vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
        int total = r*c, originr = nums.size(), originc = nums[0].size();
        if(total != (originr*originc)) return nums;
        vector<vector <int> > res(r ,vector<int>(c));
        for(int k = 0; k < total; k++) res[k / c][k % c] = nums[k / originc][k % originc];
        return res; 
    }
};

  


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: