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

Đường chéo trong C ++

Giả sử chúng ta có một ma trận gồm M x N phần tử, chúng ta phải tìm tất cả các phần tử của ma trận theo thứ tự đường chéo. Vì vậy, nếu ma trận giống như -

1 2 3
4 5 6
7 8 9

Đầu ra sẽ là [1,2,4,7,5,3,6,8,9]

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

  • Tạo một mảng ret, đặt hàng:=0 và col:=0, n:=số hàng, m:=số đếm, xuống:=false
  • cho tôi trong phạm vi từ 0 đến n - 1
    • x:=i, y:=0
    • tạo tạm thời mảng
    • while x> =0 and y
    • chèn ma trận [x, y] vào nhiệt độ và giảm x đi 1 và tăng y lên 1
  • nếu giá trị down là true, thì hãy đảo ngược mảng tạm thời
  • đối với tôi trong phạm vi từ 0 đến kích thước của nhiệt độ - 1, hãy chèn nhiệt độ [i] vào ret
  • down:=nghịch đảo của down
  • cho tôi trong phạm vi từ 1 đến m - 1
    • x:=n - 1, y:=1, tạo một mảng tạm thời
    • while x> =0 và y
    • chèn ma trận [x, y] vào nhiệt độ và giảm x đi 1 và tăng y lên 1
  • đối với tôi trong phạm vi từ 0 đến kích thước của nhiệt độ - 1, hãy chèn nhiệt độ [i] vào ret
  • down:=nghịch đảo của down
  • trả lời lại.
  • Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

    Ví dụ

    #include <bits/stdc++.h>
    using namespace std;
    void print_vector(vector<int> v){
       cout << "[";
       for(int i = 0; i<v.size(); i++){
          cout << v[i] << ", ";
       }
       cout << "]"<<endl;
    }
    class Solution {
       public:
       vector<int> findDiagonalOrder(vector<vector<int>>& matrix) {
          vector <int> ret;
          int row = 0;
          int col = 0;
          int n = matrix.size();
          int m = n? matrix[0].size() : 0;
          bool down = false;
          for(int i = 0; i < n; i++){
             int x = i;
             int y = 0;
             vector <int> temp;
             while(x >= 0 && y < m){
                temp.push_back(matrix[x][y]);
                x--;
                y++;
             }
             if(down) reverse(temp.begin(), temp.end());
             for(int i = 0; i < temp.size(); i++)ret.push_back(temp[i]);
             down = !down;
          }
          for(int i = 1; i < m; i++){
             int x = n - 1;
             int y = i;
             vector <int> temp;
             while(x >= 0 && y < m){
                temp.push_back(matrix[x][y]);
                x--;
                y++;
             }
             if(down) reverse(temp.begin(), temp.end());
             for(int i = 0; i < temp.size(); i++)ret.push_back(temp[i]);
             down = !down;
          }
          return ret;
       }
    };
    main(){
       vector<vector<int>> v = {{1,2,3},{4,5,6},{7,8,9}};
       Solution ob;
       print_vector(ob.findDiagonalOrder(v));
    }

    Đầu vào

    [[1,2,3],[4,5,6],[7,8,9]]

    Đầu ra

    [1, 2, 4, 7, 5, 3, 6, 8, 9, ]