Computer >> Máy Tính >  >> Lập trình >> C ++

Định hình lại Ma trận trong C ++


Trong các nền tảng khác nhau, có một chức năng rất hữu ích được gọi là 'reshape', chức năng đó được sử dụng để định hình lại ma trận thành ma trận mới với kích thước khác nhưng dữ liệu sẽ giống nhau. Vì vậy, nếu chúng ta có một ma trận và hai giá trị r và c cho số hàng và số cột của ma trận được định dạng lại mong muốn, tương ứng.

Vì vậy, nếu đầu vào là [[5,10], [15,20]], row =1 và col =4, thì đầu ra sẽ là [[5, 10, 15, 20]]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau−

  • Xác định tạm thời mảng

  • Xác định một kích thước thay đổi kích thước mảng 2D (r x c)

  • đếm:=0

  • để khởi tạo i:=0, khi tôi

    • để khởi tạo j:=0, khi j

      • chèn nums [i, j] vào cuối tạm thời

  • nếu r * c không bằng kích thước của nums thì -

    • trả về số

  • để khởi tạo i:=0, khi i

    • để khởi tạo j:=0, khi j

      • count =count + 1

      • res [i, j]:=temp [count]

  • trả lại res

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<auto>> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << "[";
      for(int j = 0; j <v[i].size(); j++){
         cout << v[i][j] << ", ";
      }
      cout << "],";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
      vector<int> temp;
      vector<vector<int> > res(r, vector<int>(c));
      int count = 0;
      for (int i = 0; i < nums.size(); i++) {
         for (int j = 0; j < nums[0].size(); j++) {
            temp.push_back(nums[i][j]);
         }
      }
      if (r * c != nums.size() * nums[0].size())
         return nums;
      for (int i = 0; i < r; i++) {
         for (int j = 0; j < c; j++) {
            res[i][j] = temp[count++];
         }
      }
      return res;
   }
};
main(){
   Solution ob;
   vector<vector<int>> v = {{5,10},{15,20}};
   print_vector(ob.matrixReshape(v, 1, 4));
}

Đầu vào

{{5,10},{15,20}}, 1, 4

Đầu ra

[[5, 10, 15, 20, ],]