二维数组的顺时针旋转与逆时针旋转 python c++ 二维数组取第i列元素组成一个新列表(python)

刷剑指offer时候遇到的,写一个小功能函数放这儿

剑指offer 19、顺时针打印矩阵 python c++

逆时针旋转

python版

    def turn(self,matrix):
        new = []
        if not matrix:  #列表为空,返回空列表 加这句主要是为空时下面计算列数时的matrix[0]超出下标范围
            return new   #或者return matrix 都一样
        col = len(matrix[0])
        for i in range(col-1,-1,-1):  #从最后一列开始,注意col-1和 -1这两个
            b = [j[i] for j in matrix]  #取第i列元素
            new.append(b)
        return new

c++版

c++我没找到直接从二维vector中取某一列的方法,所以用了最笨的方法一个一个放

    vector<vector<int> > turn(vector<vector<int> > matrix){
        vector<vector<int> > newMatrix;
        if(matrix.size()==0){
            return matrix;
        }
        int col = matrix[0].size();
        int row = matrix.size();
        for(int i=col-1;i>=0;--i){
            vector<int> temp;
            for(int j=0;j<row;++j){
                temp.push_back(matrix[j][i]);
            }
            newMatrix.push_back(temp);
        }
        return newMatrix;
    }

二维数组取第i列元素组成一个新列表(python)

假设有一个二维列表matrix,可以用下面这句语句取matrix的第i列元素组成一个新列表

 b = [j[i] for j in matrix] 

顺时针旋转

一种方法是逆时针旋转三次就可以了,另一种如下:

def inverseTurn(matrix):
    new = []
    if not matrix:  #列表为空,返回空列表
        return new  #或者return matrix 都一样
    col=len(matrix[0])
    for i in range(col):  #从第一列开始
         b = [j[i] for j in matrix]  #取第i列元素
         b.reverse()
         new.append(b)
    return new

c++自己按着这个补充就可以了。c++里面的一维vector的反转 reverse(b.begin(),b.end())

关于reverse的一个简单应用可以看看下面这篇 数组循环移位(从中间某个数开始往后循环到开头,再到某个数的前一个数)

posted on 2021-06-10 16:46  雾恋过往  阅读(417)  评论(0编辑  收藏  举报

Live2D