【算法题】二维数组打印

链接:https://www.nowcoder.com/questionTerminal/6fadc1dac83a443c9434f350a5803b51

有一个二维数组 (n*n) ,写程序实现从右上角到左下角沿主对角线方向打印。(注:主对角线方向为从左上角指向右下角这一斜线的方向)

给定一个二位数组 arr 及题目中的参数 n ,请返回结果数组。
 
数据范围:

输入

[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]],4

输出

[4,3,8,2,7,12,1,6,11,16,5,10,15,9,14,13]

题解:

class Printer {
  public:
    vector<int> arrayPrint(vector<vector<int> > arr, int n) {
        // write code here
        vector<int> vec;
        for (int k = 0; k < n + n - 1; k++) {
            if ( k < n - 1) {
                int i = 0;
                int j = n - 1 - k;
                while ( i < n && j < n) {
                    vec.push_back(arr[i++][j++]);
                }
            } else {
                int i = k - n + 1;
                int j = 0;
                while ( i < n && j < n) {
                    vec.push_back(arr[i++][j++]);
                }
            }
        }
        return vec;
    }
};
posted @ 2023-05-21 21:06  GavinGYM  阅读(37)  评论(0)    收藏  举报