列表

详情


MT9. 二维数组打印

描述

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

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

数据范围:

示例1

输入:

[[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]

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 10ms, 内存消耗: 8552KB, 提交时间: 2016-05-24

class Printer {
public:
    vector<int> arrayPrint(vector<vector<int> > arr, int n) {
        // write code here
                
	vector<int>res;
    //从右上角依次打印直到正对角线
    for(int i=n-1;i>=0;i--)
    {
      int x=0;
      int y=i;
      while(x<n && y<n)
      {
         res.push_back(arr[x++][y++]);  
      } 
    }
  //从正对角线依次打印
    for(int i=1;i<n;i++)
    {
       int x=i;
       int y=0;
       while(x<n && y<n)
       {
         res.push_back(arr[x++][y++]);  
       } 
    }
    return res;
    }
};

C++ 解法, 执行用时: 10ms, 内存消耗: 8552KB, 提交时间: 2016-04-27

class Printer {
public:
    vector<int> arrayPrint(vector<vector<int> > arr, int n) {
        n = arr.size();
        vector<int> result;
        for (int i = n - 1;i >= 0;i--)
        {
            int x=0, y=i;
            for (int j = 0;j <n-i;j++)
            {
                //cout << i << " " <<j << endl;
                x =0+ j;
                y =i+ j;
                //cout << x << " " << y << endl;
                result.push_back(arr[x][y]);
            }
        }
        if(n<=1)
            return result;
 
        for (int i = 1;i <= n - 1;i++)
        {
            int x = i, y = 0;
            for (int j = 0;j < n - i;j++)
            {
                //cout << i << " " << j << endl;
                x =i+ j;
                y =0+ j;
                //cout << x << " " << y << endl;
                result.push_back(arr[x][y]);
            }
        }
 
        return result;
    }
};

C++ 解法, 执行用时: 10ms, 内存消耗: 8552KB, 提交时间: 2016-04-13

class Printer {
public:
    vector<int> arrayPrint(vector<vector<int> > arr, int n) {
        // write code here
        vector<int> res;
        int i,j,k;
        for(k=n-1;k>=0;--k)
            {
            for(i=0,j=k;i<n && j<n;++i,++j)
                res.push_back(arr[i][j]);
        }
            
        
        for(k=1;k<n;++k)
            {
            for(i=k,j=0;i<n && j<n;++i,++j)
                res.push_back(arr[i][j]);
        }
        return res;
    }
};

C++ 解法, 执行用时: 10ms, 内存消耗: 8552KB, 提交时间: 2016-03-24

class Printer {
public:
    vector<int> arrayPrint(vector<vector<int> > arr, int n) {
        // write code here
        vector<int>vec;
        for(int i = n-1;i>=0;i--){
            int x = 0;
            int y = i;
            while(x<n && y<n){
                vec.push_back(arr[x++][y++]);
            }
        }
        
        for(int i = 1;i<n;i++){
            int x = i;
            int y = 0;
            while(x<n && y < n){
                vec.push_back(arr[x++][y++]);
            }
        }
        return vec;       
        
    }
};

C++ 解法, 执行用时: 10ms, 内存消耗: 8552KB, 提交时间: 2016-02-28

class Printer {
public:
    vector<int> arrayPrint(vector<vector<int> > arr, int n) {
        // write code here
        vector<int>ans;
        if(n==0)
            return ans;
        if(n==1)
        {
            ans.push_back(arr[0][0]);
            return ans;
        }
        for(int i=n-1;i>=1-n;i--)
        {
            int x=0,y=i;
            if(i<0)
            {
                y=0;
                x=-i;
            }
            for(int j=0;j<n;j++)
            {   
                if(y>=n||y<0||x>=n||x<0)
                    break;
                ans.push_back(arr[x][y]);
                y++;
                x++;
            }
        }
        return ans;
            
    }
};

上一题