Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में मैट्रिक्स रीशेप


समस्या विवरण

विभिन्न प्लेटफॉर्म पर 'रीशेप' नामक एक बहुत उपयोगी फ़ंक्शन होता है, जिसका उपयोग मैट्रिक्स को एक नए आकार में बदलने के लिए किया जाता है लेकिन डेटा वही रहता है। यदि हमारे पास एक मैट्रिक्स है और दो मान r और c हैं जो क्रमशः वांछित रीशेप मैट्रिक्स की पंक्ति संख्या और स्तंभ संख्या के लिए हैं।

उदाहरण

यदि इनपुट है: [[5,10],[15,20]], row = 1 और col = 4, तो आउटपुट होगा [[5, 10, 15, 20]]

हल करने का दृष्टिकोण

इस समस्या को हल करने के लिए निम्नलिखित चरणों का पालन करें:

  • एक सरणी temp परिभाषित करें
  • आकार (r × c) का एक 2D सरणी res परिभाषित करें
  • count := 0
  • i := 0 से आरंभ करें, जब i < nums का आकार, i को 1 से बढ़ाते हुए:
    • j := 0 से आरंभ करें, जब j < nums[0] का आकार, j को 1 से बढ़ाते हुए:
      • nums[i][j] को temp के अंत में डालें
  • यदि r * c, nums के कुल तत्वों के बराबर नहीं है, तो:
    • nums लौटाएं
  • i := 0 से आरंभ करें, जब i < r, i को 1 से बढ़ाते हुए:
    • j := 0 से आरंभ करें, जब j < c, j को 1 से बढ़ाते हुए:
      • count = count + 1
      • res[i][j] := temp[count]
  • res लौटाएं

C++ कार्यान्वयन

#include <bits/stdc++.h>
using namespace std;

void print_vector(vector<vector<int>> 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;
    }
};

int main() {
    Solution ob;
    vector<vector<int>> v = {{5,10},{15,20}};
    print_vector(ob.matrixReshape(v, 1, 4));
    return 0;
}

इनपुट

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

आउटपुट

[[5, 10, 15, 20, ],]
  1. भूलभुलैया III - C++ भूलभुलैया III - C++

    मान लीजिए एक भूलभुलैया है जिसमें खाली स्थान और दीवारें हैं और उस भूलभुलैया में एक गेंद भी है। गेंद ऊपर (u), नीचे (d), बाएं (l) या दाएं (r) दिशाओं में लुढ़ककर खाली स्थानों से गुजर सकती है, लेकिन यह दीवार से टकराने तक लुढ़कती रहती है। जब गेंद रुकती है, तो यह अगली दिशा चुन सकती है। उस भूलभुलैया में एक

  1. C++ में मैट्रिक्स का जिगजैग (या विकर्ण) ट्रैवर्सल C++ में मैट्रिक्स का जिगजैग (या विकर्ण) ट्रैवर्सल

    इस समस्या में, हमें एक 2D मैट्रिक्स दिया गया है। हमारा कार्य मैट्रिक्स के सभी तत्वों को विकर्ण क्रम में प्रिंट करना है। समस्या को समझने के लिए एक उदाहरण लेते हैं, 1 2 3 4 5 6 7 8 9 आउटपुट - 1 4 2 7 5 3 8 6 9 आइए उस पैटर्न को देखें जो मैट्रिक्स को जिगजैग या विकर्ण रूप में प्रिंट

  1. C++ में स्पाइरल मैट्रिक्स III (Spiral Matrix III) C++ में स्पाइरल मैट्रिक्स III (Spiral Matrix III)

    मान लीजिए हमारे पास R पंक्तियों और C स्तंभों वाला एक 2-आयामी ग्रिड है, हम (r0, c0) से शुरू करते हैं और पूर्व की ओर मुख किए होते हैं। यहां, ग्रिड का उत्तर-पश्चिम कोना पहली पंक्ति और स्तंभ पर है, और दक्षिण-पूर्व कोना अंतिम पंक्ति और स्तंभ पर है। हम इस ग्रिड में हर स्थिति को देखने के लिए दक्षिणावर्त स