1. 程式人生 > 其它 >二維陣列的順時針旋轉與逆時針旋轉 python c++ 二維陣列取第i列元素組成一個新列表(python)

二維陣列的順時針旋轉與逆時針旋轉 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的一個簡單應用可以看看下面這篇 陣列迴圈移位(從中間某個數開始往後迴圈到開頭,再到某個數的前一個數)